このブログを検索

大文字小文字を区別する 正規表現

Atelierで“{”が含まれるブログ記事

2015年1月21日

隠居の散策:泉北ニュータウン栂地区、寒中の鳥たち


 寒の入り(今年は、1月5日)になってから寒い日が続いている。外にでるのが億劫で、ついついパソコンの前で過ごす時間が増えている。
 メタボの身では家にじっとしているのは体に悪いので、防寒対策をして歩いてみると、それはそれで結構な発見があるのだが。

 野鳥の種類は多いが、特に変わった鳥を新たに観察することはなかった。

寒中の鳥たち

;クリックすると大きな写真になります。 コガモ♀ 和田川(堺)
2015/1/9
今シーズンはコガモが多い。

FUJIFILM HS50
185.0mm (35mm換算:1036mm)
1/320s f5.6 ISO400
;クリックすると大きな写真になります。 コガモ♂ 和田川(堺)
2015/1/9
野鳥はだいたい雄の方が派手である。

FUJIFILM HS50
185.0mm (35mm換算:1036mm)
1/320s f5.6 ISO320
;クリックすると大きな写真になります。 アオサギ飛翔 和田川(堺)
2015/1/11
野鳥を撮るときは、だいたい連写設定である。

FUJIFILM HS50
160.5mm (35mm換算:899mm)
1/320s f8.0 ISO200
;クリックすると大きな写真になります。 鶏 小田の池(堺)
2015/1/11
飼育ケージから逃げ出したようだ。久しぶりに訪れた小田の池は水を抜いて工事中だった。

FUJIFILM HS50
71.0mm (35mm換算:398mm)
1/320s f5.6 ISO250
;クリックすると大きな写真になります。 オオバン 尾知濃池(堺)
2015/1/11
オオバンは近くでは、この池だけで見られる。

FUJIFILM HS50
71.0mm (35mm換算:398mm)
1/320s f5.6 ISO250
;クリックすると大きな写真になります。 ツグミ 桃山台(堺)
2015/1/11
木に留まるときは梢に留まるようだ。

FUJIFILM HS50
71.0mm (35mm換算:398mm)
1/320s f5.6 ISO250
;クリックすると大きな写真になります。 ヒヨドリ 狭山池(大阪狭山市)
2015/1/14
久しぶりに狭山池に行った。

FUJIFILM HS50
185.0mm (35mm換算:1036mm)
1/320s f5.6 ISO250
; マガモ 狭山池(大阪狭山市)
2015/1/14
水が少なく思ったほどの水鳥はいなかった。

FUJIFILM HS50
185.0mm (35mm換算:1036mm)
1/320s f6.4 ISO200
;クリックすると大きな写真になります。 ハクセキレイ 狭山池(大阪狭山市)
2015/1/11
セキレイはこの時期どこでも見られる。

FUJIFILM HS50
123.8mm (35mm換算:694mm)
1/320s f5.6 ISO200
;クリックすると大きな写真になります。 モズ 狭山池(大阪狭山市)
2015/1/11
いつも単独行動である。

FUJIFILM HS50
185.0mm (35mm換算:1036mm)
1/320s f5.6 ISO320
;クリックすると大きな写真になります。 カワウ 待池(堺市)
2015/1/16
宮山台にある池に行ってみた。

FUJIFILM HS50
133.4mm (35mm換算:747mm)
1/320s f5.6 ISO400
;クリックすると大きな写真になります。 マガモ 待池(堺市)
2015/1/16
この池にもマガモがやってきている。

FUJIFILM HS50
82.4mm (35mm換算:462mm)
1/320s f5.0 ISO400
;クリックすると大きな写真になります。 ヒヨドリ 宮山台(堺市)
2015/1/16
センダンの実には、ヒヨドリとムクドリしかこない。

FUJIFILM HS50
133.4mm (35mm換算:747mm)
1/320s f5.6 ISO400
;クリックすると大きな写真になります。 チュウサギ 大方池(堺市)
2015/1/17
この辺りでチュウサギを見ることは珍しい。

FUJIFILM HS50
138.4mm (35mm換算:775mm)
1/500s f7.1 ISO200
;クリックすると大きな写真になります。 コサギ 東谷池(堺市)
2015/1/18
珍しく樹木に留まっていた。

FUJIFILM HS50
110.8mm (35mm換算:621mm)
1/500s f8.0 ISO200
;クリックすると大きな写真になります。 ヒドリガモ 田辺池(堺市)
2015/1/18
この近くでは、ヒドリガモはこの池しかいない。

FUJIFILM HS50
160.5mm (35mm換算:899mm)
1/500s f5.6 ISO400
;クリックすると大きな写真になります。 シジュウカラ 桃山台(堺市)
2015/1/18
今シーズンは、シジュウカラをあまり見かけない。

FUJIFILM HS50
110.8mm (35mm換算:621mm)
1/160s f5.6 ISO400
;クリックすると大きな写真になります。 アオジ 桃山台(堺市)
2015/1/18
この鳥は、チョコチョコと地面を歩くことがある。

FUJIFILM HS50
160.5mm (35mm換算:899mm)
1/160s f5.6 ISO400
;クリックすると大きな写真になります。 ホシハジロ♀ 摺鉢池(堺市)
2015/1/18
この辺りの池で、見かけることは少ない。

FUJIFILM HS50
160.5mm (35mm換算:899mm)
1/160s f5.6 ISO400
;クリックすると大きな写真になります。 マガモ♂ 摺鉢池(堺市)
2015/1/18
この池にも、飛来するようになった。

FUJIFILM HS50
185.0mm (35mm換算:1036mm)
1/160s f6.4 ISO200
;クリックすると大きな写真になります。 キンクロハジロ 筆池(堺市)
2015/1/18
この池と隣の池尾美濃池に、多い。

FUJIFILM HS50
185.0mm (35mm換算:1036mm)
1/160s f5.6 ISO200
;クリックすると大きな写真になります。 カルガモ 松池(堺市)
2015/1/18
時々このように羽を広げて伸び上がるときがある。

FUJIFILM HS50
185.0mm (35mm換算:1036mm)
1/160s f5.6 ISO200
;クリックすると大きな写真になります。 ヒヨドリ 桃山台(堺市)
2015/1/18
阪和道の遮音植え込みのネズミモチの実に群がるヒヨドリ。

FUJIFILM HS50
76.5mm (35mm換算:429mm)
1/320s f5.0 ISO400
;クリックすると大きな写真になります。 ジョウビタキ♂ 野々井(堺市)
2015/1/18
警戒心が強くあまり近づけない。

FUJIFILM HS50
148.0mm (35mm換算:829mm)
1/320s f6.4 ISO200
;クリックすると大きな写真になります。 ハマシギ 和田川(堺市)
2015/1/18
この頃よく見かけるようになった。

FUJIFILM HS50
185.0mm (35mm換算:1036mm)
1/320s f8.0 ISO200
;クリックすると大きな写真になります。 ホオジロ♀ 和田川(堺市)
2015/1/18
今シーズンはあまり見かけない。

FUJIFILM HS50
185.0mm (35mm換算:1036mm)
1/320s f5.6 ISO400


 近くの田辺池で、午前中ならヒドリガモが泳ぎまわっている。どうやら食事をしているようだ。Fujifilm Finepix HS50 で動画を撮ってみた。Youtube に投稿した。

ヒドリガモの食事風景



2015年1月19日

隠居のドライブ:ドライブ・レコーダーを試してみる


 どこかにドライブに出かけるとき、車を運転しながら前方の風景をカメラで撮りたくなる時がある。だが、運転中は危険である。ブログに旅行記などを記録するときなど、道案内の道路標識や前方に見えた景色などを写真で掲載できれば面白いと思っていた。
 車で事故を起こした時の状況を記録するドライブ・レコーダーのパンフレットを見ていると、車のスイッチが入っている間はずーっと記録しているらしい。そして、事故を起こして衝撃を検出した場合には、衝撃録画データが記録される仕組みになっている。言うまでもなく、ドライブ・レコーダーは、そのためのものであり、保険みたいものである。
 が、その本来の機能から外れて、ドライブ記録に使えば面白いのではないかと検討してみた。デジカメで動画を撮影した時と同じように、一瞬を切り出して静止画にすることもできる。これは使えそうだ。
 隠居の道楽として、comtecという会社のドライブ・レコーダー(isafe simple)を装着してみることにした。配線などややこしいから、ディーラーまかせである。

 記録は、microSD カードに記録される。記録される映像は、映像の大きさが、1280x720px(HD) と 640x360px(SD) の2つ、フレームレートは30,15,10.5fps の4つから選択できるが、ディーラー設定では HD 30fps となっている。付属の8GB microSD カードでは、目安として約48分しか記録できないようだ。それより長い場合は、上書きされていく。もう少し、フレームレートを落とすとか容量の大きいmicroSD カードすれば、長時間記録できそうである。microSD カードは、32GBでも2000円弱であるから、差し替えをもっているといいかもしれない。

 実際の記録を確認してみた。ディーラーで装着した後は、ACCスイッチが ON であるかぎり(エンジンがかかっているときはもちろん)、録画が始まっている。
ドライブ・レコーダーの本体から microSD カードを抜き出し、PCのカード・リーダーに挿せば表示されるフォルダーに iSafeViewer.exe というビューアソフトが表示されるので、これをを実行すると下のスクリーンショットのように表示される。

ビューアソフトの画面 150118-3.JPG

 動画は、約1分ごとに分けて記録されている。画面の右上には、Google Map で現在地がマークされている。この地図は、車が移動するにつれて変化していく。 isafe では、位置測定はアメリカのGPS だけでなく、ロシアのグロナス、日本のみちびきも利用して精度の向上を図っている。
 ビューアソフトの画面下の、動画アイコンmovie.JPGをクリックすると、該当ファイル(AVI ファイル)を保存することができる。また、カメラアイコンphoto.JPGをクリックすると画面に表示されている静止画を下のスクリーンショットのように切り取り保存することができる。形式は、jpg である。

動画から切り出した静止画 driverecorder-005-010-000698.jpg



 ディーラーで装着した後、自宅に帰る道で記録された動画の一部を取り出して保存し、Youtube にアップしてみた。まともな逆光であるが、まあまあの記録になっているのではないかと思う。 鳴っている音は、カーオディオとウィンカーの音である。
追記(2015/1/23): 動画の後ろで流れている音は、カーオーディオで流していたJazz であったが、Youtube で著作権に引っかかるとの warning が表示された。それで、動画の音声は途中から削除した。
音をミュートする設定もできるので、今後は音無しの録画にしたい。

記録されている動画の一部



2015年1月 1日

2015年 元旦



頌春



   昨年夏、15年間乗ってきたマーク?ステーションワゴンを思い切って、プリウスαに乗り換えました。前の車に比べ、倍以上に改善した燃費と、それよりもなんといっても最近のIT技術を集約したようなカーナビに満足しています。
 鳥・蝶・野の花などの自然観察の守備範囲も多少広がるかもしれません。


 下の写真をクリックすると、You Tube で、昨年一年の間に撮った野鳥の写真スライドショーが始まるはずです。広告が出ますが、右上Xで消してください。
 少々、重たいですし、拙い写真ばかりですが、屠蘇ざましにどうぞ。

 今年もよろしくお願いします。

2014年11月21日

隠居の散策:冬鳥がやってきた(3) ハシビロガモ、ヒドリガモなど


 いよいよ冬鳥のシーズンになってきた。11月19日、紅葉も気になるが、近所に点在する溜池に今シーズンもカモたちがやってきているかが気になる。足は自然にそちらに向かう。
 自宅がある住宅地から造成時に作られたと思われる階段を80段ほど上がったところに、東谷池という溜池がある。魚釣りは禁止の立て看板があり、柵もしてあるが、咎める人はいないから、いつも4?5人が自作の釣り台で糸を垂らしている。あまり釣っているのを見かけたことがないが、釣れても多分ブルギルだろう。
 釣り人がいるので、この池にはあまり水鳥は寄り付かないのだが、マガモがやってきていた。人の気配を察して、すぐに飛び去ってしまったが。

 その池と鉄棒や雲梯が設置してある桃山台公園(別称:スポーツ公園)を挟んで、田辺池という別の溜池がある。この池には、毎年ヒドリガモが飛来する。11月4日に訪れた時には、何羽かのエクリプスのヒドリガモが観察できたが、今回は20羽以上のヒドリガモを数えることができた。
 その足で、テラスハウスの庭に続いているような小さな溜池の摺鉢池に向かった。小さな池だが、誰も干渉しないので、冬になると何種類化の水鳥が観察できる。この日も、マガモ・ハシビロガモ・カルガモが観察できた。ハシビロガモが、20羽ほどでうずを描きながら餌をまんなかに集中させて、水面採餌をしているのを初めて見たのは、この池だった。

ハシビロガモの集団水面採餌(2012年撮影)


 摺鉢池から三木閉の小規模な畑作に回ってみると、春の七草とされるホトケノザが花を咲かせていたり、さかりのすぎたタウコギの花に、秋に多いとされるヒメアカタテハが吸蜜に来ていたりする。梢のてっぺんで、モズが鳴いている。この畑作地に面した筆池には、キンクロハジロが3羽ほど飛来していた。キンクロハジロはこの池と隣の尾美濃池によくやってくる。今の時期、数はまだ少ない。

この辺りでは一番大きな尾美濃池には、ハシビロガモが20羽ほど動きまわっている。池端に建つ団地の白壁に、ケヤキの紅葉が綺麗だ。  尾美濃池の泉北北線側の堤には、レンギョウやユキヤナギに混じってナンキンハゼが2?3本生えている。紅葉はほぼ終わり、白い実をつけている。この実はすりつぶしてろうそくにできるようだ。

 和田川沿いを歩いて自宅に帰る途中、ふと川岸のコンクリートに眼を落とすとイソヒヨドリの雌がピョンピョンと飛び跳ねている。イソヒヨドリは、ヒヨドリの仲間ではなく、ツグミの仲間ということである。

晩秋の泉北ニュータウン栂地区風景
桃山台公園の紅葉;クリックすると大きな写真になります。 桃山台公園の紅葉:(堺)
2014/11/19
NEX-7+18-200mm
31.0mm(35mm換算46mm)
1/200s f8.0 ISO100
マガモ:東谷池;クリックすると大きな写真になります。 マガモ:東谷池(堺)
2014/11/19
Fujifilm Finepix HS50
143.6mm(35mm換算504mm)
1/640s f5.6 ISO400
ヒドリガモ:田辺池;クリックすると大きな写真になります。 ヒドリガモ:田辺池(堺)
2014/11/19
Fujifilm Finepix HS50
185.0mm(35mm換算1036mm)
1/420s f5.6 ISO100 トリミング
トキワサンザシ:田辺池;クリックすると大きな写真になります。 トキワサンザシ:田辺池(堺)
2014/11/19
Fujifilm Finepix HS50
66.0mm(35mm換算370mm)
1/220s f5.6 ISO100
ヌルデ:田辺池;クリックすると大きな写真になります。 ヌルデ:田辺池(堺)
2014/11/19
NEX-7+18-200mm
150.0mm(35mm換算225mm)
1/250s f6.3 ISO100
ホトケノザ:三木閉;クリックすると大きな写真になります。 ホトケノザ:三木閉(堺)
2014/11/19
NEX-7+18-200mm
79.0mm(35mm換算118mm)
1/160s f7.1 ISO100
タウコギにヒメアカタテハ:三木閉;クリックすると大きな写真になります。 タウコギにヒメアカタテハ:三木閉(堺)
2014/11/19
NEX-7+18-200mm
148.0mm(35mm換算829mm)
1/350s f5.6 ISO100
141119_009.jpg キンクロハジロ:尾美濃池(堺)
2014/11/19
Fujifilm Finepix HS50
185.0mm(35mm換算1036mm)
1/250s f5.6 ISO100 トリミング
モズ:三木閉;クリックすると大きな写真になります。 モズ:三木閉(堺)
2014/11/19
Fujifilm Finepix HS50
185.0mm(35mm換算1036mm)
1/550s f5.6 ISO100 トリミング
ケヤキの紅葉:桃山台B団地;クリックすると大きな写真になります。 ケヤキの紅葉:桃山台B団地(堺)
2014/11/19
NEX-7+18-200mm
67.0mm(35mm換算100mm)
1/200s f7.1 ISO100
ハシビロガモ:尾美濃池;クリックすると大きな写真になります。 ハシビロガモ:尾美濃池(堺)
2014/11/19
Fujifilm Finepix HS50
148.0mm(35mm換算829mm)
1/680s f5.6 ISO100
ナンキンハゼ:尾美濃池;クリックすると大きな写真になります。 ナンキンハゼ:尾美濃池(堺)
2014/11/19
Fujifilm Finepix HS50
148.0mm(35mm換算829mm)
1/680s f5.6 ISO100
群がるスズメ:和田川;クリックすると大きな写真になります。 群がるスズメ:和田川(堺)
2014/11/19
Fujifilm Finepix HS50
88.7mm(35mm換算497mm)
1/480s f5.0 ISO100
コガモ:和田川;クリックすると大きな写真になります。 コガモ:和田川(堺)
2014/11/19
Fujifilm Finepix HS50
88.7mm(35mm換算497mm)
1/480s f5.0 ISO100
イソヒヨドリ♀:和田川;クリックすると大きな写真になります。 イソヒヨドリ♀:和田川(堺)
2014/11/19
Fujifilm Finepix HS50
88.7mm(35mm換算497mm)
1/160s f5.0 ISO160
イソヒヨドリ♀:和田川;クリックすると大きな写真になります。 イソヒヨドリ♀:和田川(堺)
2014/11/19
Fujifilm Finepix HS50
88.7mm(35mm換算497mm)
1/160s f5.0 ISO160


2014年11月 3日

隠居のスマホ備忘録:山旅ロガーを使う。(2)測定結果を Google Map に表示する


 前回、スマホのアプリ山旅ロガーを使う方法について記録した。
 このトラッキング測定結果は、GPX というファイルとKML という形式のファイルでPC に送信することができる。GPX ファイルについては、ネットにあまり自分がやりたいことにぴったり来る情報がない。KMLファイルは、XML ファイルの一種のようなので、多少馴染みがあるので、こちらでトライしてみることにした。
 PC への送信方法は、メールにファイルを添付する方法と Bluetooh で送信する方法がある。PC の近くでの作業では、どちらをとっても大差はない。

測定結果をPCに送信する
測定結果ファイルの機能ボタンをタップすると 左の画面で「共有・出力」ボタンをタップすると;クリックすると大きな写真になります。 ファイル送信方法の選択画面;クリックすると大きな写真になります。"
測定結果一覧で該当ファイルの機能ボタンをタップすると、上のような画面になる。 左の画面で「共有・出力」ボタンをタップすると右の画面になる。 上の画面で Gmail または Bluetooth を選択して、指示に従いPC に送信する。


上の真ん中のスクリーンショットにあるように、KMLファイルを出力するときには、3つの形式から選択できる。
  • ?トラッキングしたルート(ライン)のみを表示する。
  • ? ?に時刻をつける
  • ? 測定地点にマーカーを立て、時刻と text を表示する

 このような KMLファイルをPC に取り込んで、Google Maps API 表示するサンプルを見つけた。
 このサンプルコードを参考に、自宅から栂・美木多駅までの測定結果の ? の形式KMLファイルを取り込んだHTMLページを作成すると次のように表示された。


 上の地図は、Google Map の機能を持っているので、ストリートビューが見られるなど、駅から自宅までの道案内に有用かもしれない。

 同じトラッキングデータを上の ? の形式で取り込んで、上のサンプルコードの kml アドレスを変更して Google Map に表示してみると、測定地点のマーカが連なって表示される。
 この時のKMLファイルの中身を覗く方法がわからなかったが、KMLがXMLファイルの一種であることにヒントを得て、XML notepadで開いてみると、これで編集できることが分かった。(もちろん、秀丸のようなテキスト・エディタでもできる)
 だが、固有のタグについては、かなりの学習が必要なようだ。とりあえず、分かりそうなタグに見当をつけて、試行錯誤を繰り返して見た。

 そのようにして作ってみた地図を下に表示する。


  この地図では、もともと38個あったマーカーを間引きして9個にし、
  • 地点1を"自宅"の文字に置き換え、
  • 駅への通り道にある風邪を引いた時などにお世話になる清水内科近く(15の地点)にはGoogle サーチの結果リンクを、
  • 24の地点(池のそば)のマーカ(24の地点)には、その地点で撮った水鳥の写真を表示するリンクを、
  • 終点の栂・美木多駅には、泉北高速鉄道のサイトで表示される栂・美木多駅ページヘのリンク
を挿入してみた。
  写真表示には、撮った写真をかっこ良く表示させる、Google Maps API を使って地図を作成する時に使っている、lightbox のコードを追加してみると上手く動いてくれた。

 上の地図のためのコードは、以下である。

<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:v=\"urn:schemas-microsoft-com:vml\">
<head> 
<meta name=\"viewport\" content=\"initial-scale=1.0, user-scalable=no\" />

<!-- jQuery lightbox2.51 -->
<script type=\"text/javascript\" src=\"http://n-shuhei.net/atelier/Jquery2.51/js/jquery-1.7.2.min.js\"></script>
<script type=\"text/javascript\" src=\"http://n-shuhei.net/atelier/Jquery2.51/js/lightbox.js\"></script>
<link rel=\"stylesheet\" type=\"text/css\" href=\"http://n-shuhei.net/atelier/Jquery2.51/css/lightbox.css\" media=\"screen\" />

<script type=\"text/javascript\" src=\"http://maps.googleapis.com/maps/api/js?sensor=false&hl=ja\"></script>
<script type=\"text/javascript\">
  function initialize() {
    var initPos = new google.maps.LatLng(34.490435, 135.482852);
    var myOptions = {
      noClear : true,
      center : initPos,
      zoom : 15,
      mapTypeId : google.maps.MapTypeId.ROADMAP
    };
    var map_canvas = new google.maps.Map(document.getElementById(\"map_canvas\"), myOptions);
    
    var kmlUrl = \"http://n-shuhei.net/atelier/maps/KML-test/141025P.kml\";
    var kmlLayer = new google.maps.KmlLayer(kmlUrl);
    kmlLayer.setMap(map_canvas);
  }

</script>
  </head>

<body onload=\"initialize()\">
  <div id=\"map_canvas\" style=\"width:100%; height:500px\"></div>
</body>
</html>


 ここで、指定しているKMLファイルは、テキストコードは以下である。実際の編集は、XML notepad で作業している。


<?xml version=\"1.0\" encoding=\"utf-8\"?>
<kml xmlns=\"http://www.opengis.net/kml/2.2\">
  <Document>
    <name><![CDATA[2014-10-25 09:15:02]]></name>
    <description><![CDATA[自宅ー駅:2014-10-25 09:15?2014-10-25 09:33]]></description>
    <Placemark>
      <name>自宅</name>
      <description>2014-10-25 09:15:02:</description>
      <TimeStamp>
        <when>2014-10-25T00:15:02.000Z</when>
      </TimeStamp>
      <Point>
        <coordinates>135.48277,34.490517,30</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>5</name>
      <description>2014-10-25 09:16:44</description>
      <TimeStamp>
        <when>2014-10-25T00:16:44.000Z</when>
      </TimeStamp>
      <Point>
        <coordinates>135.48332,34.49017,37</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>10</name>
      <description>2014-10-25 09:18:55</description>
      <TimeStamp>
        <when>2014-10-25T00:18:55.000Z</when>
      </TimeStamp>
      <Point>
        <coordinates>135.48485,34.489635,33</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>15</name>
      <description><![CDATA[<a href=\"https://plus.google.com/104149416183172006475/about?gl=jp&hl=ja\">清水内科</a>]]></description>
      <TimeStamp>
        <when>2014-10-25T00:21:05.000Z</when>
      </TimeStamp>
      <Point>
        <coordinates>135.48608,34.488583,45</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>20</name>
      <description>2014-10-25 09:23:15</description>
      <TimeStamp>
        <when>2014-10-25T00:23:15.000Z</when>
      </TimeStamp>
      <Point>
        <coordinates>135.48712,34.487377,48</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>24</name>
      <description><![CDATA[<a href=\"http://n-shuhei.net/atelier/photo_birds/DSC04864.JPG\" title=\"\" rel=\"lightbox[]\">マガモ交雑種</a>]]></description>
      <TimeStamp>
        <when>2014-10-25T00:25:00.000Z</when>
      </TimeStamp>
      <Point>
        <coordinates>135.48792,34.486824,46</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>29</name>
      <description>2014-10-25 09:27:12</description>
      <TimeStamp>
        <when>2014-10-25T00:27:12.000Z</when>
      </TimeStamp>
      <Point>
        <coordinates>135.48877,34.48632,54</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>35</name>
      <description>2014-10-25 09:30:48</description>
      <TimeStamp>
        <when>2014-10-25T00:30:48.000Z</when>
      </TimeStamp>
      <Point>
        <coordinates>135.49054,34.485283,53</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>38</name>
      <description><![CDATA[<a href=\"http://www.semboku.jp/station/toga_mikita/outline/\">栂・美木多駅</a>]]></description>
      <TimeStamp>
        <when>2014-10-25T00:33:30.000Z</when>
      </TimeStamp>
      <Point>
        <coordinates>135.48999,34.484875,61</coordinates>
      </Point>
    </Placemark>
  </Document>
</kml>


 もう少し高度な加工ができそうであるが、一段の学習が必要のようだ。痴呆予防には役立つかもしれないので、もうちょっと遊んでみたいと思っている。

2014年10月17日

隠居のパソコン備忘録:Youtubeをページ内で再生させるYouTube Player API を試してみる


 9月の終わりにあった和泉の国ジャズストリートで録画した Videoをブログにアップした。その時、ブログのページ内で再生できるようにしたかったが、方法が見つからず、YouTube にリンクするしかなかった。YouTube の画面はかなり noisy である。

 最近、ひょんなことで、ブログのページ内で録画を YouTube の機能を使って再生できることが分かった。私的な旅行地図などを作るときに使っている Google Maps API(Application Program Interface) と同じように、Javascript を使う。Codeを自ら作り出す能力はないから、他人様のコードのパクリである。Javascript だから少しぐらいは自分で改訂することが出来る。
 今回は、YoheiM.netYoutubeをサイト内で再生させるYoutube APIの使い方を参考にさせていただいた。

YouTube Player API で表示する動画


 上の YouTube 埋め込みプレーヤは、次のような Javascript コードで実現している。
 青太字部分は、YouTube に登録されたファイル名である。

<div id="player"></div>
<script>

    var tag = document.createElement('script');
   tag.src = "https://www.youtube.com/iframe_api";
  var firstScriptTag = document.getElementsByTagName('script')[0];
   firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

   var player;
   function onYouTubeIframeAPIReady() {

  player = new YT.Player('player', {
    height: '390',
    width: '640',
    videoId: 'rL--g6q7zu4',
    events: {
      'onReady': onPlayerReady,
      'onStateChange': onPlayerStateChange
    }
  });
}

function onPlayerReady(event) {
}


function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.ENDED) {
    alert('finish');
  }
}
</script>

追記(2015/10/26): Youtube の Webページヘ内で再生させるのに、上のコードでは、Internet Explorer では表示されないことが、最近になって分かった。現在では Yutube が iframe を使ったコードを提供しており、更に便利にWebページ内に埋め込むことが可能になっている。方法など詳細については、別に記録したいと思う。
 現在は、新しい埋め込みコードで、表示している。



2013年3月28日

隠居のドライブ:南紀の私的観光地図とその作成方法。


 南紀をドライブしたときの訪問地点を地図にプロットしてみた。地図作成に使ったのは、【隠居のパソコン備忘録: Google Maps API JS V3 で、番号付きマーカーを表示する】で記録した方法である。この地図は、右メニューの観光地図一覧に【初春の南紀私的観光地図】として追加した。



 この地図を作るためには、Google Map を表示するための HTML ファイルと、このページに呼び込んでくる XML ファイルを記述する必要がある。いずれも、宍道湖周辺を旅行した時の地図を作ったファイルをコピーして作成した。
 html ファイルはテキスト編集ソフト【秀丸】で、xml ファイルは Microsoft が提供する【XML Notepad】で修正をした。XML ファイルは、秀丸でも編集できるが、このXML Notepad は、XMLファイル編集に特化しており、文法の間違いも指摘してくれるので助かる。

 html ファイルで修正・追加する箇所は次の青字部分である。

90行目あたり、
     case "num05": num = "05";
                break;
     case "num06": num = "06";
                break;
--------------------------------------------------------------------------
に、次を追加する。番号マークは、7番目まで設定したので。
    case "num07": num = "07";
                break;  

103行目あたり
    gicons["num05"] = getMarkerImage(category2num("num05"));
      gicons["num06"] = getMarkerImage(category2num("num06"));
-----------------------------------------------------------------------------------
 に、次を追加する。
      gicons["num07"] = getMarkerImage(category2num("num06"));

184行目あたり、
zoom: 10,
      center: new google.maps.LatLng(35.430603,133.012136),   //松江
      zoom: 10,
--------------------------------------------------------------------------------------------------
を、次の地点の経度・緯度に変更する。もう少し、拡大したい場合は、zoom を11と大きくする。

   center: new google.maps.LatLng(33.676354,135.677032),   //熊野古道中辺路道の駅
   zoom: 10,     

193行目あたりの 読み込む xml ファイルを新しい xml ファイルに変更する。
      downloadUrl("http://n-shuhei.net/atelier/maps/V3_sinnjiko_num.xml", function(doc) {
----------------------------------------------------------------------------------------------------------------
      downloadUrl("http://n-shuhei.net/atelier/maps/V3_kisyuu_num.xml", function(doc) {  

221行目あたり、
<tr><td align="center"style="width:1000px; background-color: #ffffe0;" ><br /><h2>晩秋の宍道湖私的観光地図</h2></td></tr>
--------------------------------------------------------------------------------------------------------------
地図のタイトルおよび大きさを指定する。地図の幅を指定する箇所はもう一箇所ある。
<tr><td align="center"style="width:700px; background-color: #ffffe0;" ><h2>初春の南紀州観光地図</h2></td></tr>      
<tr><td><div id="map" style="width: 700px; height: 500px"></div></td></tr><tr>


読み込む XML ファイルは、XML Notepad を使って、宍道湖の地図を作った時のファイルをもとに、番号マークをプロットする地点の経度・緯度とプロット地点の名前や紹介する写真リンク先を 入力すればよい。リンク先のURL などは、ブログのソースを使えば簡単である。参考までに、作成した XMLファイルは次のようなものである。


<?xml version="1.0" encoding="utf-8"?>
<markers>
 <marker name="1:志原海岸" address="<a href="http://n-shuhei.net/atelier/photo_drive/130321_024.jpg" title="志原海岸" rel="lightbox[nanki]">志原海岸</a><br /><a href="http://n-shuhei.net/atelier/photo_drive/130321_003.jpg" title="ハマダイコン:志原海岸" rel="lightbox[nanki]">ハマダイコン</a><br /><a href="http://n-shuhei.net/atelier/photo_drive/130321_004.jpg" title="イソヒヨドリ:志原海岸" rel="lightbox[nanki]">イソヒヨドリ</a>" lng="135.431213" lat="33.570291" category="num01"/>
 <marker name="2:串本海中公園" address="<a href="http://n-shuhei.net/atelier/photo_drive/130321_020.jpg" title="水中トンネル:海中公園" rel="lightbox[nanki]">水中トンネル</a>" lng="135.745783" lat="33.481639" category="num02"/>
 <marker name="3:串本ロイヤルホテル" address="<a href="http://n-shuhei.net/atelier/photo_drive/130321_023.jpg" title="露天風呂:串本ロイヤルホテル" rel="lightbox[nanki]">露天風呂:串本ロイヤルホテル</a><br /><a href="http://n-shuhei.net/atelier/photo_drive/130321_021.jpg" title="日の出:串本ロイヤルホテル" rel="lightbox[nanki]">日の出</a><br /><a href="http://n-shuhei.net/atelier/photo_drive/130322_028.jpg" title="小雨にけぶる橋杭岩:串本ロイヤルホテル" rel="lightbox[nanki]">小雨にけぶる橋杭岩</a>" lng="135.784836" lat="33.481281" category="num03"/>
 <marker name="4:潮岬" address="<a href="http://n-shuhei.net/atelier/photo_drive/130321_009.jpg" title="潮岬灯台" rel="lightbox[nanki]">潮岬灯台</a><br /><a href="http://n-shuhei.net/atelier/photo_drive/130322_027.jpg" title="潮岬から太平洋を望む" rel="lightbox[nanki]">潮岬から太平洋を望む</a><br /><a href="http://n-shuhei.net/atelier/photo_drive/130321_007.jpg" title="ジョウビタキ雌:潮岬" rel="lightbox[nanki]">ジョウビタキ雌</a><br /><a href="http://n-shuhei.net/atelier/photo_drive/130321_008.jpg" title="トビ:潮岬" rel="lightbox[nanki]">トビ</a>" lng="135.762500" lat="33.433055" category="num04"/>
 <marker name="5:樫野崎灯台" address="<a href="http://n-shuhei.net/atelier/photo_drive/130321_010.jpg" title="樫野崎灯台" rel="lightbox[nanki]">樫野崎灯台</a><br /><a href="http://n-shuhei.net/atelier/photo_drive/130321_025.jpg" title="樫野崎から潮岬の眺望" rel="lightbox[nanki]">樫野崎から潮岬の眺望</a><br /><a href="http://n-shuhei.net/atelier/photo_drive/130321_013.jpg" title="樫野崎から太平洋の眺望" rel="lightbox[nanki]">樫野崎から太平洋の眺望</a><br /><a href="http://n-shuhei.net/atelier/photo_drive/130321_012.jpg" title="内海側の定置網" rel="lightbox[nanki]">内海側の定置網</a>" lng="135.86259" lat="33.473263" category="num05"/>
 <marker name="6:那智の滝" address="<a href="http://n-shuhei.net/atelier/photo_drive/130321_018.jpg" title="那智の滝" rel="lightbox[nanki]">那智の滝</a><br /><a href="http://n-shuhei.net/atelier/photo_drive/130321_014.jpg" title="那智の滝への石段" rel="lightbox[nanki]">那智の滝への石段</a>" lng="135.887704" lat="33.675069" category="num06"/>
 <marker name="7:熊野那智大社" address="<a href="http://n-shuhei.net/atelier/photo_drive/130321_016.jpg" title="熊野那智大社" rel="lightbox[nanki]">熊野那智大社</a><br /><a href="http://n-shuhei.net/atelier/photo_drive/130321_015.jpg" title="イソヒヨドリ:熊野那智大社" rel="lightbox[nanki]">イソヒヨドリ</a>" lng="135.890236" lat="33.668533" category="num07"/>
 </markers>


なお、地図作成と直接関連していないが、Internet Explorer 9 では、ページを編集・更新して、サーバーにアップロードしてもも反映されないことが起こった。(Google Chrome ではすぐに反映される) IE8 のときと違って更新されるタイミングが異なるようだ。
 このようなときは、IE9 で ツール⇒インターネットオプション⇒全般タグ⇒閲覧の履歴の設定で、出てくるポップアップ画面で、インターネット一時ファイルの選択を【Web サイトを表示するたびに確認する】(default では 自動的に確認する となっている)を選択すれば治るようだ。

 

2012年11月22日

くらしのこよみの更新:二十四節気、小雪 一候、虹蔵不見(にじかくれてみえず)


 もうすぐ、12月である。本日から、二十四節気の小雪となった。第一候虹蔵不見(にじかくれてみえず)(七十二候の第五十八候)の5日間になった。 くらしのこよみにも、季節の楽しみとして、神農祭(11月22日)が取り上げられている。現役時代の仕事は大阪の製薬企業に勤めていたので、妙に懐かしい。そういえば、小雪が降ったこともあったように思う。みんながコートを着だすのもこの頃だ。

 ブログ右カラムの一番下にあるくらしのこよみを更新した。

2012年9月30日

隠居のパソコン備忘録: ブログ(MT4)に、動画(You tube)をアップロードする


 ブログに動画を載せたい場合がある。Jazz street での楽団演奏の録画や水鳥の動きなどである。このごろのデジタルカメラは、動画撮影機能がついているのが普通である。
 今年も開催された和泉の国ジャズストリートでは、Nikon Coolpix P510 で、SLMC(泉陽高校軽音楽部)の演奏を録画した。設定は、初期設定のままである。初期設定では、HD 1080p(1920x1080) となっている。それ以外のファイルに関する情報は取説には記載されていない。
 デジカメで撮った写真や動画は、Picasa3 でパソコンにとり込む。取り込んだファイルの拡張子は、写真の場合 .jpg であるが、動画は .MOV となっている。ファイルの種類は、Quick Time ムービーとなっている。
 これでは、Microsoft のWindows Media Player では再生できない。Quick Time ムービーは、Apple が開発したソフトだから無理もない。撮影した動画をタイトルをつけたりして編集するのは、フリーのソフト(Windows XP service pack2 に付属している)である moviemaker を使っている。
 デジカメで撮った動画の最初は、Canon IXY900IS であった。これでの動画の形式は、Microsoft の AVI ファイルだったので、moviemaker で編集することができた
どうやら、Canon と Nikon はこんなところでも張り合っているらしい。

 使い慣れた moviemaker で編集するためには、MOV を AVI に形式変換しなければならない。今年の冬に、ハシビロガモの集団採餌行動を NikonD7000 で録画編集した時には、ファイルの形式変換は、AVS video converter を使用した。今回も、AVI に形式変換し、moviemaker に読み込んで見ると、次のようなメッセージが出てファイルを読み込めない。
ファイルの再生に必要なコーデックがコンピュータにインストールされていないため、aviファイルを読み込むことができません。必要なコーデックを既にダウンロードしてインストールしている場合は、Windows ムービー メーカーを閉じてから再度開始し、もう一度ファイルを読み込んでください。

 必要なコーデックというのを探すソフトを導入して、探してみたが要領がよく分からない。AVS video converter の最新バージョンをインストールして動かそうとしたが、確か以前は無料(お試し期間中?)だったのが有料になっている。しかも、結構高い。それで、試行錯誤してみると FREESTUDIO というパッケージの中に、Free AVI Video Converterというソフトがあるのがわかった。
 このソフトで MOV を AVI に形式変換してみると、今度は moviemaker で変換後のファイルを読み込むことができた。タイトルをつけるなどの簡単な編集をして、レンタルサーバーにアップロードし、ブログ本文からリンクすると再生するようになった。

 和泉の国ジャズストリートでのランブリンフェローズという楽団のデキシーを、Sanyo(現在、この会社名はなくなっている) の PCM レコーダーで録音した .mp3ファイル を Yahoo Media Playerを使ってブログに記載しようと再調査していると、Yahoo Media Player は Yahoo webplayer と名前が変わって、動画(You Tube)も簡単にアップロードできるようになっている。
アップロードの方法は簡単である。Yahoo が提供するつぎのような JavaScript を、ブログのHTML <head> 部に置く。Instruction では、<body>部の下部におけとあるが、Movable Typeでは、 上手くいかなかった。 
<script type="text/javascript"> var YWPParams = { theme: "silver" }; </script>
<script type="text/javascript" src="http://webplayer.yahooapis.com/player.js"></script> 
上の行は、ブログで表示するときに、枠を黒ではなく、灰色にするために入れたスクリプトである。なくても問題はない。
 YouTubeの動画をブログで表示するには、次のようなコードを挿入したい場所に、記述するだけでよい。
<a href="http://www.youtube.com/watch?v=elg9OjDJIB8&feature=youtu.be"><img alt="DSCN0641.jpg" src="http://n-shuhei.net/atelier/photo_senboku/DSCN0641.jpg" width="200" height="133" /></a>

イメージファイル部分をテキストにしても問題はない。イメージ写真にすると、真ん中に再生アイコンが表示される。

 ブログ上にYouTube の動画を表示するには、もちろんYouTube に動画をアップロードしておく必要がある。今まで、YouTube に動画をアップロードした経験はないが、それほど難しい作業ではない。
  YouTube にアクセスすると YouTube は Google の一部になっているので、すでにGoogle にアカウント(普通は、gmailのアドレスがID )を持っておれば、マイチャネル(登録チャネル)が表示されるようだ。

upload00.JPG


 右上のツールタグの【アップロード】をクリックすると下のスクリーンショットようになる。
upload01.JPG

 PC にある動画(この場合、hashibiro.wmv というファイル:形式は、ほとんどOK のようだ)を選んで、アップロードすると、下のような画面となり、YouTube のファイル名(URL)が右上に表示される。
upload03.JPG
 下の Sample画像は、ブログの中に、次のように上のURL 組み込んで表記している。
<a href="http://www.youtube.com/watch?v=v4kdwpAnmGM&feature=context-gau"><img alt="ハシビロガモ動画" src="http://n-shuhei.net/atelier/photo_birds/120208_0181-thumb-150x100.jpg" width="200" height="133" /></a>

Sample 動画(YouTube)
ハシビロガモ動画

2012年9月22日

隠居のパソコン備忘録: Google Maps API JS V3 で、番号付きマーカーを表示する

 
 従来、右フレームの【晩秋の宍道湖私的観光地図】は、Google Maps API のV2版で作成したものを置いていた。V2 でかいた地図はまだ動くが、2010年5月に廃止されており、V3 へ移行することが奬められている。
 この地図では、必要性はあまりないが、マーカーに番号を表示させていた。新しく V3 で作りなおすときにも、学習も兼ねて番号を表示させたかった。

 ところが、番号入りマーカーを表示するサンプルコードが見つからない。V2 で作成したコードを V3 に置き換えることも試みたが、悲しいかな十分な知識がないし、一から勉強する意欲もないので、うまく行きそうにない。
 今までに成功した V3 のコードを眺めていると【Google Maps API JS V3 で、カテゴリー別に色違いマーカーを表示する】 で使ったコードを、わかる範囲でいじってみれば、なんとかなるのではないかと思われた。色違いのマーカーを、番号付きマーカーに置き換えるのである。この地図では、category 別に赤・青・黄色・緑などのマーカーにしているが、これを番号つきのマーカーに置き換えるのである。また、また、一つずつのマークを、一つのカテゴリーと考えるのである。
 このコードでは、マーカーを立てる地点の経度・緯度や吹きだしに表示するHTMLなどは、XML ファイルを読み込んでくることになっている。V2 で作成した地図では、HTMLの中に直接入力されていた。

 とりあえずうまく表示できるようなので、自分用の備忘録として、XML ファイルおよびHTML コードを記録しておきたい。よくわかった人から見れば、へんてこなコードとなっていると思うが、古希を超えるとほとんど羞恥心はなくなっている。

使用したXML ファイル。項目 category は num01, num02・・・のようになっている。
<?xml version="1.0" encoding="utf-8" ?> 
- <markers>
  <marker name="1:宍道湖温泉" address="   <a href="http://n-shuhei.net/atelier/photo_drive/DSC_4820-1.JPG" title="宍道湖の夕焼け" rel="lightbox[sinjiko]">宍道湖の夕焼け</a><br/>   <a href="http://n-shuhei.net/atelier/photo_drive/DSC_4831.JPG" title="宍道湖の朝" rel="lightbox[sinjiko]">宍道湖の朝</a>" lng="133.053875" lat="35.469199" category="num01" /> 
  <marker name="2:米子水鳥公園" address="   <a href="http://n-shuhei.net/atelier/photo_digisco/DSC01539.JPG" title="コハクチョウ" rel="lightbox[sinjiko]" >コハクチョウ</a><br/>   <a href="http://n-shuhei.net/atelier/photo_digisco/DSC01510.JPG" title="オナガガモ:♀を追いかける♂たち" rel="lightbox[sinjiko]" >オナガガモ</a><br/>   <a href="http://n-shuhei.net/atelier/photo_digisco/DSC01529.JPG" title="マガンの群れ:沖の州" rel="lightbox[sinjiko]" >マガンの群れ</a><br/>   <a href="http://n-shuhei.net/atelier/photo_digisco/DSC01591.JPG" title="キンクロハジロ?" rel="lightbox[sinjiko]" >キンクロハジロ</a>" lng="133.284674" lat="35.44333" category="num02" /> 
  <marker name="3:宍道湖グリーンパーク" address="   <a href="http://n-shuhei.net/atelier/video/digisco_1.wmv" target="_blank">コハクチョウ(video)</a><br/>   <a href="http://n-shuhei.net/atelier/photo_digisco/DSC01620.JPG" title="セグロセキレイ" rel="lightbox[sinjiko]" >セグロセキレイ</a><br/>   <a href="http://n-shuhei.net/atelier/photo_digisco/DSC01632.JPG" title="トビ?" rel="lightbox[sinjiko]" >トビ</a><br/>   <a href="http://n-shuhei.net/atelier/photo_birds/0911211.jpg" title="ジョウビダキ?" rel="lightbox[sinjiko]" >ジョウビダキ</a><br/>   <a href="http://n-shuhei.net/atelier/photo_drive/DSC_4872.JPG" title="ゴビウスにある水槽" rel="lightbox[sinjiko]">ゴビウスにある水槽</a>" lng="132.866077" lat="35.444729" category="num03" /> 
  <marker name="4:出雲大社" address="   <a href="http://n-shuhei.net/atelier/photo_drive/DSC_4886.JPG" title="出雲大社にて" rel="lightbox[sinjiko]">出雲大社にて</a>" lng="132.685919" lat="35.401434" category="num04" /> 
  <marker name="5:足立美術館" address="   <a href="http://n-shuhei.net/atelier/photo_drive/DSC_4908.JPG" title="足立美術館の紅葉" rel="lightbox[drive]">足立美術館の紅葉</a><br/>   <a href="http://n-shuhei.net/atelier/photo_drive/Stitched_003.JPG" title="枯山水の庭:3枚の合成写真" rel="lightbox[drive]">枯山水の庭</a><br/>   <a href="http://n-shuhei.net/atelier/DSC_4932.JPG" title="足立美術館:絵画を観ているように" rel="lightbox[drive]">仏間から庭を望む</a>" lng="133.198242" lat="35.377854" category="num05" /> 
  <marker name="6:米子自動車道大山PA" address="   <a href="http://n-shuhei.net/atelier/photo_drive/DSC_4720-1.JPG" title="雪化粧した大山:大山PAより" rel="lightbox[sinjiko]">大山の紅葉</a>" lng="133.419342" lat="35.386531" category="num06" /> 
  </markers>


 作成した地図作成の稚拙なHTMLコード(Google Maps API V3 のJavaScript を含む)は、右フレームに掲載している【晩秋の宍道湖私的観光地図】のソース・コードを見ていただければ、わかると思うが、参考までに下に記載し、少しのコメントを加えたいと思う。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 

<title>Google Maps Javascript API v3 Example: Marker Categories</title> 

<!-- jQuery lightbox2.51 -->
<script type="text/javascript" src="http://n-shuhei.net/atelier/Jquery2.51/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="http://n-shuhei.net/atelier/Jquery2.51/js/lightbox.js"></script>
<link rel="stylesheet" type="text/css" href="http://n-shuhei.net/atelier/Jquery2.51/css/lightbox.css" media="screen" />

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript" src="http://n-shuhei.net/atelier/maps/V3test/downloadxml.js"></script>
    <title>Google Maps</title>
<style type="text/css">
html, body { height: 100%; } 
</style>
    <script type="text/javascript">
    //<![CDATA[
      // this variable will collect the html which will eventually be placed in the side_bar 
      var side_bar_html = ""; 
      var gmarkers = [];
      var gicons = [];
      var map = null;
var infowindow = new google.maps.InfoWindow(
  { 
    size: new google.maps.Size(150,50)
  });

gicons["01"] = new google.maps.MarkerImage("http://n-shuhei.net/Googlemaps/Markers/marker_01.png",
      // This marker is 20 pixels wide by 34 pixels tall.
      new google.maps.Size(20, 34),
      // The origin for this image is 0,0.
      new google.maps.Point(0,0),
      // The anchor for this image is at 9,34.
      new google.maps.Point(9, 34));
  // Marker sizes are expressed as a Size of X,Y
  // where the origin of the image (0,0) is located
  // in the top left of the image.
  // Origins, anchor positions and coordinates of the marker
  // increase in the X direction to the right and in
  // the Y direction down.

  var iconImage = new google.maps.MarkerImage('http://n-shuhei.net/Googlemaps/Markers/marker_01.png',
      // This marker is 20 pixels wide by 34 pixels tall.
      new google.maps.Size(20, 34),
      // The origin for this image is 0,0.
      new google.maps.Point(0,0),
      // The anchor for this image is at 9,34.
      new google.maps.Point(9, 34));
  var iconShadow = new google.maps.MarkerImage('http://n-shuhei.net/atelier/maps/V3test/msmarker.shadow.png',
      // The shadow image is larger in the horizontal dimension
      // while the position and offset are the same as for the main image.
      new google.maps.Size(37, 34),
      new google.maps.Point(0,0),
      new google.maps.Point(9, 34));
 
function getMarkerImage(iconNum) {
   if ((typeof(iconNum)=="undefined") || (iconNum==null)) { 
      iconNum = "01"; 
   }
   if (!gicons[iconNum]) {
      gicons[iconNum] = new google.maps.MarkerImage("http://n-shuhei.net/Googlemaps/Markers/marker_"+ iconNum +".png",
      // This marker is 20 pixels wide by 34 pixels tall.
      new google.maps.Size(20, 34),
      // The origin for this image is 0,0.
      new google.maps.Point(0,0),
      // The anchor for this image is at 6,20.
      new google.maps.Point(9, 34));
   } 
   return gicons[iconNum];
}

function category2num(category) {
   var num = "01";       
   switch(category) {
     case "num01": num = "01";
                break;
     case "num02": num = "02";
                break;
     case "num03": num = "03";
                break;
     case "num04": num = "04";
                break;
     case "num05": num = "05";
                break;
     case "num06": num = "06";
                break;
     default:   num = "01";
                break;
   }

   return num;
}

      gicons["num01"] = getMarkerImage(category2num("num01"));
      gicons["num02"] = getMarkerImage(category2num("num02"));
      gicons["num03"] = getMarkerImage(category2num("num03"));
      gicons["num04"] = getMarkerImage(category2num("num04"));
      gicons["num05"] = getMarkerImage(category2num("num05"));
      gicons["num06"] = getMarkerImage(category2num("num06"));
      // A function to create the marker and set up the event window
function createMarker(latlng,name,html,category) {
    var contentString = html;
    var marker = new google.maps.Marker({
        position: latlng,
        icon: gicons[category],
        shadow: iconShadow,
        map: map,
        title: name,
        zIndex: Math.round(latlng.lat()*-100000)<<5
        });

        // === Store the category and name info as a marker properties ===
        marker.mycategory = category;                                 
        marker.myname = name;
        gmarkers.push(marker);

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(contentString); 
        infowindow.open(map,marker);
        });
}

      // == shows all markers of a particular category, and ensures the checkbox is checked ==
      function show(category) {
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].mycategory == category) {
            gmarkers[i].setVisible(true);
          }
        }

        // == check the checkbox ==
        document.getElementById(category+"box").checked = true;
      }

      // == hides all markers of a particular category, and ensures the checkbox is cleared ==
      function hide(category) {
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].mycategory == category) {
            gmarkers[i].setVisible(false);
          }
        }

        // == clear the checkbox ==
        document.getElementById(category+"box").checked = false;
        // == close the info window, in case its open on a marker that we just hid
        infowindow.close();
      }

      // == a checkbox has been clicked ==
      function boxclick(box,category) {
        if (box.checked) {
          show(category);
        } else {
          hide(category);
        }

        // == rebuild the side bar
        makeSidebar();
      }

      function myclick(i) {
        google.maps.event.trigger(gmarkers[i],"click");
      }

      // == rebuilds the sidebar to match the markers currently displayed ==
      function makeSidebar() {
        var html = "";
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].getVisible()) {
            html += '<a href="javascript:myclick(' + i + ')">' + gmarkers[i].myname + '<\/a>' + ' ' ;
          }
        }

        document.getElementById("side_bar").innerHTML = html;
      }

  function initialize() {
    var myOptions = {
      zoom: 10,
      center: new google.maps.LatLng(35.430603,133.012136),   //松江
      mapTypeId: google.maps.MapTypeId.HYBRID
    }
    map = new google.maps.Map(document.getElementById("map"), myOptions);
    google.maps.event.addListener(map, 'click', function() {
        infowindow.close();
        });

      // Read the data
      downloadUrl("http://n-shuhei.net/atelier/maps/V3_sinnjiko_num.xml", function(doc) {
  var xml = xmlParse(doc);
  var markers = xml.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {
          // obtain the attribues of each marker
          var lat = parseFloat(markers[i].getAttribute("lat"));
          var lng = parseFloat(markers[i].getAttribute("lng"));
          var point = new google.maps.LatLng(lat,lng);
          var address = markers[i].getAttribute("address");
          var name = markers[i].getAttribute("name");
          var html = "<b>"+name+"<\/b><p>"+address;
          var category = markers[i].getAttribute("category");
          // create the marker
          var marker = createMarker(point,name,html,category);
        }

        // == create the initial sidebar ==
        makeSidebar();
      });
    }

    //]]>
    </script>
  </head>

<body style="margin:0px; padding:0px;" onload="initialize()"> 
    <!-- you can use tables or divs for the overall layout -->
    <table border=1 >
<tr><td align="center"style="width:1000px; background-color: #ffffe0;" ><br /><h2>晩秋の宍道湖私的観光地図</h2></td></tr>      
<tr><td>
           <div id="map" style="width: 1000px; height: 500px"></div>
        </td></tr><tr>
<td valign="top" style="width:1000px; background-color: #ffffe0; font-size: small;"> 
 上の地図は、Google Mapsの機能を持っています。拡大・縮小・移動ができます。下の該当番号をクリックすると該当番号マーカーに吹きだしが出てきます。その吹き出しにある青文字をクリックすると写真(一部 動画)がでてきます。</td></tr><tr>
        <td valign="top" style="width:1000px; background-color: #ffffe0; font-size: small;"> 
           <div id="side_bar"></div>
        </td>
      </tr>
    </table>


    <noscript><b>JavaScript must be enabled in order for you to use Google Maps.</b> 
      However, it seems JavaScript is either disabled or not supported by your browser. 
      To view Google Maps, enable JavaScript by changing your browser options, and then 
      try again.
    </noscript>

<br /><br />
<!-- Google AdSense -->
<script type="text/javascript"><!--
google_ad_client = "pub-8556873278052332";
/* AdSense foot ad */
google_ad_slot = "1589991765";
google_ad_width = 728;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
  </body>
</html>


  • 番号付きマーカーは、dLINKbRING というサイトからダウンロードできる
  • 表示する地図を、ラベル付き航空写真とするには、mapTypeId: google.maps.MapTypeId.HYBRID とすればよい。通常は、HYBRID の部分が、ROADMAP となっている。
  • マーカーをクリックしてでる吹きだしの中に表示される写真リンクをクリックして出てくる写真を、同一画面の中央に表示するJavaScript ソフト lightbox は機能する。 jQuerylightbox2.51 を使った。


2012年8月26日

隠居のパソコン備忘録: Google Maps API JS V3 での地図でマーカー地点をズームイン・アウトする


 V3 にバージョンアップした Google Maps JS API で旅行地図などを作成することをいろいろとトライしている。
 当サイト内の Studio YAMAKO のオーナーは、お住まいの横浜近郊はもちろんのこと、海外をも含めて様々なところを旅行され、それぞれの地点での綺麗な写真をブログにUPされている。
 旅行先を一枚の地図で表示することは無理なので、海外旅行については、その都度旅行先の地図を作って表示させてもらっているが、国内旅行については、年度別に、一枚の日本地図にプロットしている。(例:2011年旅行地図) だが、これでは地図が大まかすぎて、訪問先地点毎に、コントロールを使って、ズームインと地図の移動をする必要がある。

 それで何か良いサンプルはないかと探ってみると、Google Maps API links に、V2 で作成されたMike Williams' tutorial の The Basics - Part 3: Loading the data from an XML file with added "Zoom To, Zoom In, Zoom Out links in infowindow V3 に書き換えたサンプルコードが見つかった。
 2011年旅行地図では、隠居のパソコン備忘録: Google Maps API JS V3 でXML ファイルを読み込むに記録したサンプルコードを使った。今回のコードは、そのコードに、Zoom in・out の機能を付け加えたものである。呼び込んでくる XML ファイルは、同じ形式である。サンプルコードには、XML ファイルに zoom というタグが組み込まれていたが、なしでも機能するようである。
 2012年の旅行地図では、このコードを使った。見た目は、2011年旅行地図と変わらないが、地点をクリックして出てくる吹きだし(infowindow)に、表示される Zoom to [+] [-] をクリックすると、その地点が地図の中心となる。 さらに、[+] をクリックしていくと、Zoom が一段ずつUPする。2011年旅行地図に比べれば、少し改良された。
 下は、そのコードである。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>Google Maps Javascript API v3 Example: Loading the data from an XML</title> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript" src="http://xxxxxxxxxx/JSlibrary/downloadxml.js"></script>
<style type="text/css">
html, body { height: 100%; } 
</style>
<script type="text/javascript"> 
//<![CDATA[
      // this variable will collect the html which will eventually be placed in the side_bar 
      var side_bar_html = ""; 
      // arrays to hold copies of the markers and html used by the side_bar 
      // because the function closure trick doesnt work there 
      var gmarkers = []; 
     // global "map" variable
      var map = null;
// A function to create the marker and set up the event window function 
function createMarker(latlng, name, html, zoom) {
    var contentString = html;
    // add the zoom links
    contentString += '<br><a  href="javascript:map.setCenter(new google.maps.LatLng('+latlng.toUrlValue(6)+')); map.setZoom('+zoom+');">Zoom To</a>';
    contentString += ' - <a  href="javascript:map.setCenter(new google.maps.LatLng('+latlng.toUrlValue(6)+')); map.setZoom(parseInt(map.getZoom())+1);">[+]</a>';
    contentString += ' - <a  href="javascript:map.setCenter(new google.maps.LatLng('+latlng.toUrlValue(6)+')); map.setZoom(parseInt(map.getZoom())-1);">[-]</a>';

    var marker = new google.maps.Marker({
        position: latlng,
        map: map,
        icon: new google.maps.MarkerImage('http://labs.google.com/ridefinder/images/mm_20_blue.png'),         
        zIndex: Math.round(latlng.lat()*-100000)<<5
        });
    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(contentString); 
        infowindow.open(map,marker);
        });
    marker.MyZoom = zoom;
    // save the info we need to use later for the side_bar
    gmarkers.push(marker);
    // add a line to the side_bar html
    side_bar_html += '<a href="javascript:myclick(' + (gmarkers.length-1) + ')">' + name + '<\/a><br>';
}
// This function picks up the click and opens the corresponding info window
function myclick(i) {
  google.maps.event.trigger(gmarkers[i], "click");
}
function initialize() {
  // create the map
  var myOptions = {
    zoom: 8,
    center: new google.maps.LatLng(34.717876,137.851424),
    mapTypeControl: true,
    mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
    navigationControl: true,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  map = new google.maps.Map(document.getElementById("map_canvas"),
                                myOptions);
  google.maps.event.addListener(map, 'click', function() {
        infowindow.close();
        });
      // Read the data from example.xml
      downloadUrl("http://xxxxxxxx/xxxxxxxxx/xxxx/V3_yamako_2012.xml", function(doc) {
        var xmlDoc = xmlParse(doc);
        var markers = xmlDoc.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {
          // obtain the attribues of each marker
          var lat = parseFloat(markers[i].getAttribute("lat"));
          var lng = parseFloat(markers[i].getAttribute("lng"));
          var point = new google.maps.LatLng(lat,lng);
          var html = markers[i].getAttribute("html");
          var label = markers[i].getAttribute("label");
          var zoom = markers[i].getAttribute("zoom");
          if (!zoom) zoom = 15;
          // create the marker
          var marker = createMarker(point,label,html,zoom);
        }
        // put the assembled side_bar_html contents into the side_bar div
        document.getElementById("side_bar").innerHTML = side_bar_html;
      });
    }

var infowindow = new google.maps.InfoWindow(
  { 
//    size: new google.maps.Size(150,100),
    maxWidth: 450
  });

    // This Javascript is based on code provided by the
    // Community Church Javascript Team
    // http://www.bisphamchurch.org.uk/   
    // http://econym.org.uk/gmap/
    // from the v2 tutorial page at:
    // http://econym.org.uk/gmap/basic3.htm 
//]]>

</script> 
  </head> 

<body style="margin:0px; padding:0px;" onload="initialize()"> 
    <!-- you can use tables or divs for the overall layout --> 
     <table border="1"> 
<tr>
<td bgcolor="#FFFFCC" align="center" colspan="2"><font color="#000000"><strong><big>Yamako 国内旅行地図:2012年
</big></strong><br /></font></td></tr>      
<tr> 
        <td> 
           <div id="map_canvas" style="width: 780px; height: 820px"></div> 
        </td> 
        <td width = 220 valign="top"  bgcolor="#ffffe0" style="text-decoration: underline; color: #000000; font-size: small;" >
           <div id="side_bar"></div> 
        </td> 
      </tr> 
    </table> 


    <noscript><p><b>JavaScript must be enabled in order for you to use Google Maps.</b> 
      However, it seems JavaScript is either disabled or not supported by your browser. 
      To view Google Maps, enable JavaScript by changing your browser options, and then 
      try again.</p>
    </noscript> 

  </body> 
</html> 


2012年7月29日

隠居のパソコン備忘録: Google Maps API V3 で Polyline を描く


 自作地図を作成するのに便利していた Google Maps API のバージョンが、 V2 から V3 に大幅に変更され、来年5月には V2 で作成した地図が動かなくなりそうだということは、隠居のパソコン備忘録:Google Maps API V3 で旅行地図を作成するで、記録した。

 Studio YAMAKO のオーナーが、この2?3年に海外旅行した時の地図には、旅程を表す Polyline を表示している。これも、V3 になると書き換えなければならない。V2 では、XML ファイルに訪れた地点の経度・緯度を書き込んでおくと Polyline を描いてくれる sample code があったが、V3 では、そのような sample code は、ヒットしなかった。
 【Google Maps JavaScript API V3の使い方】というサイトに、【ポリラインの表示】というぺーじがあり、polyline を描くための訪問地点の経度・緯度を Javascript に直接記入する方法が紹介されていた。このサンプル・コードを参考に、先日記録した【Google Maps API JS V3 でXML ファイルを読み込む】の Javascript コードに追加してみると上手く動くことが分かった。老人の備忘録として、「トルコ周遊8日間の旅」の地図のコードを記録としておきたい。下のコードの青字部分が Polyline 表示のために追加した部分である。
 訪問地点の経度・緯度は、V2 のときに使っていた XML ファイルの中からコピーしてきた。記述する部分は少ないので、XML ファイルにする必要性はあまりない。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>Google Maps Javascript API v3 Example: Loading the data from an XML</title> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript" src="http://n-shuhei.net/JSlibrary/downloadxml.js"></script>

<style type="text/css">
html, body { height: 100%; } 
</style>

<script type="text/javascript"> 
//<![CDATA[
// this variable will collect the html which will eventually be placed in the side_bar 
      var side_bar_html = ""; 

      // arrays to hold copies of the markers and html used by the side_bar 
     // because the function closure trick doesnt work there 

      var gmarkers = []; 

     // global "map" variable
      var map = null;

// A function to create the marker and set up the event window function 
function createMarker(latlng, name, html) {
    var contentString = html;
    var marker = new google.maps.Marker({
        position: latlng,
        map: map,
        zIndex: Math.round(latlng.lat()*-100000)<<5
        });

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(contentString); 
        infowindow.open(map,marker);
        });

    // save the info we need to use later for the side_bar
    gmarkers.push(marker);

    // add a line to the side_bar html
    side_bar_html += '<a href="javascript:myclick(' + (gmarkers.length-1) + ')">' + name + '<\/a><br>';
}

// This function picks up the click and opens the corresponding info window
function myclick(i) {
  google.maps.event.trigger(gmarkers[i], "click");
}

function initialize() {
  // create the map
  var myOptions = {
    zoom: 6,
    center: new google.maps.LatLng(39.436193,29.86908),
    mapTypeControl: true,
    mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
    navigationControl: true,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }

  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

  google.maps.event.addListener(map, 'click', function() {
        infowindow.close();
        });

      // Read the data from hachi.xml
      downloadUrl("V3_maps_Turkey.xml", function(doc) {
        var xmlDoc = xmlParse(doc);
        var markers = xmlDoc.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {

          // obtain the attribues of each marker
          var lat = parseFloat(markers[i].getAttribute("lat"));
          var lng = parseFloat(markers[i].getAttribute("lng"));
          var point = new google.maps.LatLng(lat,lng);
          var html = markers[i].getAttribute("html");
          var label = markers[i].getAttribute("label");

          // create the marker
          var marker = createMarker(point,label,html);
        }

      // put the assembled side_bar_html contents into the side_bar div
        document.getElementById("side_bar").innerHTML = side_bar_html;

// Polyline 表示の追加 ここから     
    var drivePlan = [
      new google.maps.LatLng(40.010787, 26.279297),
      new google.maps.LatLng(39.317035, 26.703644),
      new google.maps.LatLng(37.947176, 27.342567),
      new google.maps.LatLng(37.914409, 29.120979),
      new google.maps.LatLng(37.882441, 32.485199),
      new google.maps.LatLng(38.376115, 34.002686),
      new google.maps.LatLng(38.533127, 34.433899),
      new google.maps.LatLng(38.627063, 34.720917),
      new google.maps.LatLng(38.772019, 35.490303),
      new google.maps.LatLng(41.013066, 28.975067),
      new google.maps.LatLng(40.010787, 26.279297)
    ];
    var drivePath = new google.maps.Polyline({
      path: drivePlan,
      strokeColor: "#FF0000",
      strokeOpacity: 1.0,
      strokeWeight: 2
    });
      drivePath.setMap(map);
// ここまで 

      });
    }

var infowindow = new google.maps.InfoWindow(
  { 
//    size:  new google.maps.Size(200,50)
  });

//]]>

</script> 
  </head> 

<body style="margin:0px; padding:0px;" onload="initialize()"> 

<table border="1"> <tr>
<td bgcolor="#FFFFCC" align="center" colspan="2"><font color="#000000"><strong><big>「洞窟ホテルに泊まる!トルコハイライト周遊8日間」の旅</big></strong></font></td></tr>      
<tr><td> 
    <div id="map_canvas" style="width: 800px; height: 600px"></div> 
    </td> 
    <td width = 200 valign="top" bgcolor="#ffffcc" >
左の地図は、Google Mapsの機能を持っています。拡大・縮小・移動ができます。下の地名をクリックすると該当位置に吹き出しが出ます。吹き出しの中のリンクをクリックすると詳細地図あるいは関連投稿に飛びます。<br /><br />
    <div id="side_bar"style="text-decoration: underline; color: #000000; font-size: small;"></div> 
    </td></tr></table> 

    <noscript><p><b>JavaScript must be enabled in order for you to use Google Maps.</b> 
      However, it seems JavaScript is either disabled or not supported by your browser. 
      To view Google Maps, enable JavaScript by changing your browser options, and then 
      try again.</p>
    </noscript> 

  </body> 
</html> 


2012年7月21日

隠居のパソコン備忘録: Google Maps API JS V3 でXML ファイルを読み込む

 
 自作地図を作成するのに便利していた Google Maps API のバージョンが、 V2 から V3 に大幅に変更され、来年5月には V2 で作成した地図が動かなくなりそうだということは、隠居のパソコン備忘録:Google Maps API V3 で旅行地図を作成するで、記録した。

  V2 で作成した多くの地図では、外部ファイルである XML ファイルを読み込んでマーカを立てる地点やマーカをクリックすると出てくる吹きだしの中に、リンク先などの情報を表示していた。年間の旅行先などマーカが順次増える場合には、XML ファイルに経度・緯度や必要なリンクを書き足すだけでいいので便利をしていた。
 今まで V2 で作成してきた地図を V3 にバージョンアップして XML ファイルを読み込むためのサンプル・コードを探し回したが、適切なコードが見つからなかった。一から、作成する能力はからきしない。途方に暮れて、上のブログに記録した前回の方法で、XML ファイルを使わず直接 JavaScript に書き込むことも挑戦しかけたが途方も無い作業のようなのでやめて、今までの XML ファイルが使えそうなサンプル・コードで、再度粘ってみることにした。

 拝借したサンプル・コードは、上のブログに記録した前回の方法ときにも拝借した、【Using the Google Maps API v3】 というページにある【lLoading the data from an XML file translated to v3】のソース・コードである。
 V3 のGoogle Maps API にXML ファイルを読み込む方法は、多くの場合、前回に lightbox 2.51 の導入で紹介した JavaScript のライブラリー jQuery が使われている。拝借したサンプル・コードでは、jQuery ではなく、downloadxml.js というライブラリーが使われている。どうも、jQuery の方が本流らしいが、私にとっては、V3 で今までの XML ファイルが使えるサンプル・コードの方がありがたい。
 一週間以上かなりの時間を使って粘った甲斐があって、下のようなコードで XML が読み込めるようになった。
 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>Google Maps Javascript API v3 Example: Loading the data from an XML</title> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript" src="http://n-shuhei.net/XXXXX/XXX/XXXXX/downloadxml.js"></script>

<style type="text/css">
html, body { height: 100%; } 
</style>

<script type="text/javascript"> 
//<![CDATA[
// this variable will collect the html which will eventually be placed in the side_bar 
      var side_bar_html = ""; 

      // arrays to hold copies of the markers and html used by the side_bar 
     // because the function closure trick doesnt work there 

      var gmarkers = []; 

     // global "map" variable
      var map = null;

// A function to create the marker and set up the event window function 
function createMarker(latlng, name, html) {
    var contentString = html;
    var marker = new google.maps.Marker({
        position: latlng,
        map: map,
        zIndex: Math.round(latlng.lat()*-100000)<<5
        });

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(contentString); 
        infowindow.open(map,marker);
        });

    // save the info we need to use later for the side_bar
    gmarkers.push(marker);

    // add a line to the side_bar html
    side_bar_html += '<a href="javascript:myclick(' + (gmarkers.length-1) + ')">' + name + '<\/a><br>';
}

// This function picks up the click and opens the corresponding info window
function myclick(i) {
  google.maps.event.trigger(gmarkers[i], "click");
}

function initialize() {
  // create the map
  var myOptions = {
    zoom: 12,
    center: new google.maps.LatLng(35.377556,134.534862),
    mapTypeControl: true,
    mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
    navigationControl: true,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }

  map = new google.maps.Map(document.getElementById("map_canvas"),
                                myOptions);

  google.maps.event.addListener(map, 'click', function() {
        infowindow.close();
        });

      // Read the data from hachi.xml
      downloadUrl("hachi.xml", function(doc) {
        var xmlDoc = xmlParse(doc);
        var markers = xmlDoc.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {

          // obtain the attribues of each marker
          var lat = parseFloat(markers[i].getAttribute("lat"));
          var lng = parseFloat(markers[i].getAttribute("lng"));
          var point = new google.maps.LatLng(lat,lng);
          var html = markers[i].getAttribute("html");
          var label = markers[i].getAttribute("label");

          // create the marker
          var marker = createMarker(point,label,html);
        }

        // put the assembled side_bar_html contents into the side_bar div
        document.getElementById("side_bar").innerHTML = side_bar_html;
      });
    }

var infowindow = new google.maps.InfoWindow(
  { 
//    size:  new google.maps.Size(200,50)
  });

    // This Javascript is based on code provided by the
    // Community Church Javascript Team
    // http://www.bisphamchurch.org.uk/   
    // http://econym.org.uk/gmap/
    // from the v2 tutorial page at:
    // http://econym.org.uk/gmap/basic3.htm 

//]]>

</script> 
  </head> 

<body style="margin:0px; padding:0px;" onload="initialize()"> 

    <!-- you can use tables or divs for the overall layout --> 
    <table border="1"> 
<tr>
<td bgcolor="#FFFFCC" align="center" colspan="2"><font color="#000000"><strong><big>ハチ高原近辺私的観光地図</big></strong><br /></font></td></tr>      
<tr> 
        <td> 
           <div id="map_canvas" style="width: 800px; height: 600px"></div> 
        </td> 
        <td width = 200 valign="top"  bgcolor="#ffffe0" style="text-decoration: underline; color: #000000; font-size: small;" >
<!--<td valign="top" style="width:150px; text-decoration: underline; color: #4444ff;">-->
           <div id="side_bar"></div> 
        </td> 
      </tr> 
    </table> 

    <noscript><p><b>JavaScript must be enabled in order for you to use Google Maps.</b> 
      However, it seems JavaScript is either disabled or not supported by your browser. 
      To view Google Maps, enable JavaScript by changing your browser options, and then 
      try again.</p>
    </noscript> 

  </body> 
</html> 
サンプル地図

 試行錯誤は、拡張子の前につける . (ピリオド)が抜けていたり、ファイルのアップロード先を間違ったりなど実に単純なミスの連続であった。
 とくに、Geekなぺーじの【Google MAPS JavaScript APIでのデバッグ】にも書かれているように、日本語コードで最後までつまづいた。V2 のときには、Shift-JIS でも OK だったXML ファイルが、UTF-8 でないとエラーを起こすというより、全く読んでくれない。
 この試行錯誤のお陰で、Google Maps API について、少し理解が深まったが、JavaScript に十分な知識がない老人にはやっぱり難解な世界である。中断していた JavaScript の学習も再開せねばと思うが、なにしろやりたいことが多すぎる。
 来年5月までに、順次 V2 の地図を V3 にしていくつもりである。

2012年7月17日

隠居のパソコン備忘録: jQuery lightbox (同一画面上に拡大写真をかっこよく表示する)を導入する


 先日来、個人的地図作成サービス Google Maps API V3 を学習してきた。このサービスを使って、加賀地方旅行地図を作成したことを記録している。このサービスを学習中に、jQuery という JavaScript のライブラリーが、いろいろな JavaScript ソフトを導入するときに使われていることが分かった。

 この JavaScript ライブラリーの jQuery を使って、拡大写真の表示を同一画面上に表示する JavaScript の lightbox が新しいバージョン(Version 2.51)になっていることも分かった。(従来のライブラリーは、prototype.js )
 これを、先の加賀地方旅行地図での写真表示に使って見ることにした。
サンプル画像

 インストールについては、Lightbox2 のページから、Lightboxv2.51 をダウンロードし、PC のどこかのフォルダ(例えば、lightbox2.51 を作成し )に解凍する。
  上のページの【How to use】を参考に、ブログをアップロードしているサーバーに新しいフォルダー(例えば、lightbox2.51 )を作成し、ファイル転送ソフト(私の場合、FFFTP )を使ってサーバーにアップロードする。解凍したフォルダーをまるままアップロードしても問題は無いと思う。ただ、サーバーに余裕がない場合には、先ほどのページを参考に、必要なファイルのみをアップロードしたほうが良い。このあたりは、【アクアラングウエスタンver.9.2】というページを参照させてもらった。

 このようにして、lightbox2 が動作するのを確認の上で、次のようなカスタマイズを行った。
  • 初期値では、写真を表示する画面の背景色は黒であるが、これを好きな色に変えるには、lightbox.css の冒頭にある次の青字部分を変更する。
    /* line 6, ../sass/lightbox.sass */
    #lightboxOverlay {
      position: absolute;
      top: 0;
      left: 0;
      z-index: 9999;
      background-color: #408080; 元は、black;
      filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=85);
      opacity: 0.85;
      display: none;
    }
    


  • 写真ページを閉じるボタンを close.png(close.png) から、自作の closelabel.gif(closelabel.gif) に変更した。変更は、lightbox.js の50行目あたりある次の青字部分を変更した。なお、赤字部分で示したように、imageのありかは、絶対パスで書いておいたほうが無難なようである。
      LightboxOptions = (function() {
        function LightboxOptions() {
          this.fileLoadingImage = 'http://n-shuhei.net/xxxxx/Jquery2.51/images/loading.gif';
          this.fileCloseImage = 'http://n-shuhei.net/xxxxx/Jquery2.51/images/closelabel.gif';
          this.resizeDuration = 700;
          this.fadeDuration = 500;
          this.labelImage = " photo  "; 元は、Image 
          this.labelOf = "of";
        }
    


 この Jquery lightbox2 を、Movable Type 4 で作ったブログの写真(多分1000枚以上ある)の表示に適用した。(従来は、prototype.js の lightbox 2.0 ) Movable Type に適用するには、テンプレートのヘッダーにある lightbox 2.0 の Javascript 表示を lightbox 2.51 のコードに置き換えるだけで、すべての写真表示が新しい lightbox2.51 の表示となるので極めて楽ちんである。(つまり、HTML でのコードは、 lightbox 2.0 でも lightbox2.51 でも同じである。)

2012年7月12日

隠居のパソコン備忘録:Google Maps API V3 で旅行地図を作成する


 Google が提供する自分好みの地図を作成できるサービス Maps JavaScript API の バージョンUP(V2 ⇒ V3)が2009年5月に発表されている。最近になって、V2 は廃止され、V3 がリコメンドされていることを知った。プロ向けと思われる【Google Deveopers】というサイトにある【Google Maps JavaScript API V3】 のページには、次のような記載がある。
注: このページに記載されている Google Maps JavaScript API バージョン 3 は、正式な JavaScript API となりました。JavaScript API バージョン 2 は、Google の廃止ポリシーにより正式に廃止されました。アップデート、拡張された新しいバージョンに、コードを移行することをおすすめします。

さらに、Deprecated(非推奨という意味か?) と記されている V2 のページには、次の記載がある。
Note: The Google Maps JavaScript API Version 2 has been officially deprecated as of May 19, 2010. The V2 API will continue to work until May 19, 2013. We encourage you to migrate your code to version 3 of the Maps JavaScript API.

なんと来年5月には、動かなくなりそうだ。私のサイトには、V2 作成した地図を数多く掲載している。慌てて、V3 の学習を始めた。V2 に比べると大幅に変更になっている。サンプルコードをパクリして、作成してきた地図を、基本的な知識が乏しい老人が、今までのコードをバージョンアップするのは至難の技に思われる。それで、今までのコードのバージョンアップは諦めて、ネットで紹介してくれているV3 版のサンプルコードを頼りに、新しく書いて見ることにした。

 ようやくたどり着いたのが、7月10日に収載した【加賀地方旅行地図】である。この地図を例として、作成方法を備忘録として記録しておきたい。

 やりたいことは、
  1. 旅行した地域をカバーする地図を表示する。
  2. 観光した地点にマーカーを立てる。
  3. マーカーをクリックすると吹きだし(infowindow) がでる。
  4. infowindow には、撮った写真の表示や観光地点のURL へリンクを表示できるようにする。
  5. 地図の枠外に訪問地点名を表示し、クリックすると地図上の該当マーカに、infowindow が表示するようにする。
  6. できあがった地図は、私のブログ(Movable Type 4)で、エントリーとして機能するようにする。

 このような地図は、Google Maps API V2 では、できていたのであるが、V3 では初めての試みである。
 ささやかな JavaScript の知識か持たない私の技術では、これを一から作成することは困難である。Sample コードをネットで探し回したところ、【Using the Google Maps API v3】 というページに、要望にあったコード(Mike Williams' tutorial The Basics - Part 2: Adding a clickable sidebar translated to v3)を見つけることができた。Mike Williams' tutorial は、V2 の地図を作成するときにほとんど丸写しに近く参照させていただいたサイトである。残念ながら、このサイトでの V3 によるサンプルコードはない。このV2 でのコードをどなたかが、V3 に translate されたコードである。

 このサンプルコードをもとに、作成した旅行地図 のコードは、以下のとおりである。
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Google Maps Javascript API v3 Example: Adding a clickable sidebar</title><script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<style type="text/css">
  html, body { height: 100%; } 
</style>

<script type="text/javascript"> 

//<![CDATA[

    var side_bar_html = ""; 
    var gmarkers = []; 
    var map = null;

function initialize() {
    var myOptions = {
    zoom: 10,
    center: new google.maps.LatLng(36.338359,136.446075),
    mapTypeControl: true,
    mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
    navigationControl: true,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }

  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  google.maps.event.addListener(map, 'click', function() {
   infowindow.close();
   });

  var point = new google.maps.LatLng(36.056871,136.355095);
  var marker = createMarker(point,"永平寺","<a href='./travel-eiheiji.html' target='_blank'>永平寺 写真サムネイル画像</a>")

  var point = new google.maps.LatLng(36.237628,136.125712);
  var marker = createMarker(point,"東尋坊","<a href='./travel-tojinbo.html' target='_blank'>東尋坊  写真サムネイル画像</a>")

  var point = new google.maps.LatLng(36.228506,136.175559);
  var marker = createMarker(point," そば処あおき","<a href='http://fukui-shop.net/soba/208449/' target='_blank'>URL: そば処あおき</a>")

  var point = new google.maps.LatLng(36.243996,136.374664);
  var marker = createMarker(point," 山中温泉","<a href='./travel-yamanaka.html' target='_blank'>山中温泉 写真サムネイル画像</a><br /><a href='http://yoshinoyairokuen.jp/viewpoint/map_aki_fuyu.pdf' target='_blank'>PDF: 山中温泉案内図</a><br /><a href='http://www.daiwaresort.co.jp/kajikasou/' target='_blank'>URL: 河鹿荘ロイヤルホテル</a>")

  var point = new google.maps.LatLng(36.322871,136.294327);
  var marker = createMarker(point," 鴨池観察館","<a href='./travel-kamoike.html' target='_blank'>鴨池観察館 写真サムネイル画像</a><br /><a href='http://park15.wakwak.com/~kamoike/' target='_blank'>URL: 鴨池観察館</a>")

  var point = new google.maps.LatLng(36.56098,136.658249);
  var marker = createMarker(point," 金沢21世紀美術館","<a href='./travel-21seiki.html' target='_blank'>金沢21世紀美術館 写真サムネイル画像</a><br /><a href='http://ja.wikipedia.org/wiki/%E9%87%91%E6%B2%A221%E4%B8%96%E7%B4%80%E7%BE%8E%E8%A1%93%E9%A4%A8' target='_blank'>URL: 金沢21世紀美術館</a>")

  document.getElementById("side_bar").innerHTML = side_bar_html;
}
var infowindow = new google.maps.InfoWindow(
  { 
    size: new google.maps.Size(150,50)
  });

function myclick(i) {
  google.maps.event.trigger(gmarkers[i], "click");
}

function createMarker(latlng, name, html) {
    var contentString = html;
    var marker = new google.maps.Marker({
        position: latlng,
        map: map,
        zIndex: Math.round(latlng.lat()*-100000)<<5
        });

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(contentString); 
        infowindow.open(map,marker);
        });

    gmarkers.push(marker);

   side_bar_html += '<a href="javascript:myclick(' + (gmarkers.length-1) + ')">' + name + '<\/a>  ';
}
 
//]]>

</script> 

</head> 

<body style="margin:0px; padding:0px;" onload="initialize()"> 
     <table border="1"> 
      <tr> 
        <td> 
           <div id="map_canvas" style="width: 720px; height: 650px"></div> 
        </td>
      </tr><tr>   
        <td valign="top" style="width:720px; font-size:small; color: #4444ff;"><strong>観光場所:クリックすると該当場所に吹きだしがでます。</strong><div id="side_bar"> </div> 
        </td> 
      </tr> 
    </table> 

    <noscript><p><b>JavaScript must be enabled in order for you to use Google Maps.</b> 
      However, it seems JavaScript is either disabled or not supported by your browser. 
      To view Google Maps, enable JavaScript by changing your browser options, and then 
      try again.</p>
    </noscript> 

<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> </script> 
 </body> 
</html> 


 このコードについて、若干補足して記録しておきたい。
  • マーカーを立てる経度・緯度の数値は、「Google マップ 地図検索」で検索した地点に出てくるマーカを右クリックすると出てくるポップアップにある「この場所について」をクリックすると 検索文字を入れるボックスに表示される。
  • infowindow の中に表示するURLや写真ページヘのリンクは、HTMLコードを書く要領で書けば良い。
  • side-bar は サンプルコードでは 地図の右枠外であるが、HTMLコードでテーブルを作成する要領で(</tr><tr> ) 行を変えれば、地図の下枠外に表示できる。


 なお、写真の表示に、ブログで使ってきた lightbox (当ブログで使っている写真表示手法)のコードを書いても、Google Maps API というJavaScript の中で、lightbox というJavaScript を使うことになり、うまく表示されない。もう少し勉強すればできるのかもしれないが、次善の策として、ワンクッションおいてサムネイル画像を表示することにした。なお、lightbox については、今回の学習中に、jQuery.js という JavaScript のライブラリーを使ったバージョンが出ていることが分かった。(従来は、prototype.js を使っていた)
jQuery 版lightbox については、稿を改めて記録したい。

 作成した地図を、MT4 のブログにエントリーするには、<iframe>をつかって次のようにブログの中に取り込めば良い。
<iframe src="http://n-shuhei.net/atelier/maps/travel-kaga.html" width="740" height="700" scrolling="NO" frameborder="0"></iframe>


 なお、ブログの右フレームに載せている地図は、Google Maps API V2 で作成しているが、ここでは、xml ファイルを使っている地図が多い。V3 でのXML との連携についても学習しなければならない。おかげで、当分痴呆にはならないだろうが。

2012年4月13日

隠居の花見:泉北ニュータウン栂地区の桜(2012)


 4月8日の週、ソメイヨシノは満開である。泉北ニュータウンの栂地区の桜を訪ね歩いてみた。
  栂地区の花見で人気のあるのは、西原公園の桜である。南堺警察署の北すぐにある大方池の周りには、芝生が広がり、花見時期にはバーベキューの匂いが立ち込める。
 泉北高速鉄道の栂・美木多駅から北へ福泉南中学・福泉中央小学校に続く遊歩道の両側は桜並木である。植えられてから40年くらいになっているので、かなり大きな木になっている。

 栂・美木多駅から南の御池台まで続く遊歩道の両側も桜並木である。庭代台公園・御池公園の桜もきれい。
 泉北1号線からハーベストの丘に続く道路ぎわ御池台1丁に、御池の滝桜と名付けられている大きな枝垂れ桜がある。ニュータウン開発以前からあったらしく、有志の人たちで大事に維持されているという。探鳥ウォークで時間があるときには、和田川沿いにこのあたりまで足を伸ばすことがあるが、めったには行くことはない。

 栂地区で有名な桜が、もう一本ある。南区役所から、東へ200mほど下った団地の入口付近にある、緑の御衣ざくらである。この桜は、八重桜の一種で花が緑色である。この時期には、まだ蕾である。この南区役所から東へ向かう道路と並行して下を走る泉北1号線との間には、オオシマザクラが植えられている。今年は、レンギョウや雪柳も咲くのが遅かったので、桜と白と黄色のコントラストとなっており、なかなかいい感じである。オオシマザクラは、桃山公園の緑道にも並木として植えられている。

 散策して撮った写真を、下のような泉北ニュータウン栂地区の地図に、プロットしてみた。 地図は、Google Maps API V3 となるので、今までの地図を変更した。【Google Maps API JS V3 でXML ファイルを読み込む】などを參考にしている。
 このようにしてみると、桜の多くはニュータウンの開発で植えられたものがほとんである。


-->

2012年3月 4日

隠居のMT 備忘録:テーブル(表)の形式を工夫してみる


 前回の記事【隠居のMT 備忘録:IE で表示した時に出現する意図しないスペースを削除する】で表の上部に余分なスペースが表示される件については、一応落着しているのであるが、それでも原因が探りたくて、色々と大した知識もない中で思いをめぐらしていた。

 どうやら、先の現象が起きるのは、記事の中のテーブルを頻回に修正・追加しているのが原因ではないかと思われた。それで、?IE CSS Table?というようなワードでググってみると、 HTML コードでの <table> に関するプロパティを付け焼刃で学習してきたために、十分把握していなかったことが分かった。今後、HTML CSS にあまり知識のないものが、テーブルをいじるときに注意すべき事項を思いつくまま、備忘録として記録しおきたい。

 
  • テーブルやセルの枠を表示する線は、それぞれ太さがあり、隣接するセルのボーダーを重ねて表示したり、間隔をあけて表示したりできる。これは、CSS(スタイル・シート)で指定する。
     重ねての表示は、次のようなコードが紹介されている。
    table  { border-collapse: collapse }

    また、間隔をあけての表示は、次のように設定するとされている。
    table {  border-collapse: separate }

    どうやら、border-collapse を指定しない場合(初期設定)は、separate になっていたようだ。そのために、IE の場合、テーブルを設定し直すたびに、少しずつ sell-space が設定されており、たび重なって大きな空白ができたのではないかと推定される。ど素人のゲスだから、全く的外れかもしれないが。

  • このような学習をしていると、テーブルの枠やセルの線の太さや色などを指定したり、空白のセルにも枠をつけるためのスタイルを設定する方法が分ってきた。テーブルの枠やセルの線は、今まで特別に意識しない場合デフォールトの設定である solid で通してきたが、好きな線の太さや色を設定する方法も分かった。それで、もう少し自分好みにしたくて、新たにスタイルシートに設定した <table> に関するコードは、次のようなものである。
    なお、余談であるが、線の色:#ffcf64 および #48acd0 は私がディスクトップの壁紙として使っているカワセミの写真の腹部および羽の色である。この色コードは、以前から愛用している【ウェブカラークリエイター】というソフトを使って、採取したものである。
    /* テーブルのセル・ボーダーの表示形式 */
    table
     .waku1
      { border-collapse: separate;
        border: 1px solid #ffcf64; }
     .waku2
      { border-collapse: collapse;
        border: 1px solid #48acd0; }
    
    td { border: 1px solid #48acd0 }  


border-collapse: separate の場合(初期設定)
collapse_2.JPG


border-collapse: collapse の場合(新しく設定したスタイルシート)
collapse_3.JPG


2011年1月29日

隠居のGoogle Maps: (続)Google Maps API を使って野鳥出現地点をカスタム・マーカーでプロットする

 先にエントリーした【隠居のGoogle Maps: Picasa を使って野鳥出現地点をプロットする】の方法では、プロットする地点を追加しようとすると、そこで記録した 4. 以降のかなり厄介な作業を、一からやり直さなければならないことが分かった。これでは不便である。

 それで、もとに戻って、自由度の高い Google Maps API を応用することを再度試みることにした。右フレームにおいている【京都・滋賀・奈良近辺私的観光地図】のような方式に変えれば、XML ファイルに位置情報と写真へのリンクを追加するだけで、プロット地点を増やしていけることが分かっている。ただ、先のエントリーのように、プロット地点に立てるマーカーを鳥のアイコンにする方法が、乏しい知識ではなかなかわからなかった。マーカーを任意のものに変える方法は色々と紹介されているが、外部のXML ファイルを呼びこんでくるようなコードは紹介されていなかった。

 いろいろとトライしているうちに、どうやら使えそうにコードが、Google から紹介されているのを見つけた。このコードを応用して追加・訂正することで カスタム・マーカー ができたので、忘れないうちに記録しておくことにした。

 仕樣は【野鳥の写真サムネイル】の種別名欄に、【撮影地点地図】 というボタンを置き、これをクリックすると新しい画面が開き、小鳥のマーカーが地図上にプロットされる。このマーカーか、右フレームの地名をクリックすると、その地点で撮影した野鳥の写真が吹きだしに表示される仕組みである。
そして、ここが肝心なのだが、新しい写真とその撮影地点は、XML ファイルで容易に追加することができるようにしたことである。カワラヒワの撮影地点地図を例にとって、以下、順を追って記録する。

  1. まず、XML ファイルを呼びこんで地図にマーカーを立てるもととなる html コード(Google Maps API の JavaScript が含まれている。)を用意する。このオリジナルは、Google Maps API Tutorial からいただいたもので、【道東ドライブ:Google Maps API Traial_3】のエントリーで紹介している。
    このHTML コードの中で、使用している JavaScript は、以下のようなものである。
    
    <script type="text/javascript">
        //<![CDATA[
    
        if (GBrowserIsCompatible()) {
          // this variable will collect the html which will eventualkly be placed in the side_bar
          var side_bar_html = "";
        
          // arrays to hold copies of the markers and html used by the side_bar
          // because the function closure trick doesnt work there
          var gmarkers = [];
          var htmls = [];
          var i = 0;
    
          // A function to create the marker and set up the event window
          function createMarker(point,name,html) {
            var marker = new GMarker(point);
            GEvent.addListener(marker, "click", function() {
              marker.openInfoWindowHtml(html);
            });
            // save the info we need to use later for the side_bar
            gmarkers[i] = marker;
            htmls[i] = html;
            // add a line to the side_bar html
            side_bar_html += '<a href="javascript:myclick(' + i + ')">' + name + '</a><br>';
            i++;
            return marker;
          }
    
          // This function picks up the click and opens the corresponding info window
          function myclick(i) {
            gmarkers[i].openInfoWindowHtml(htmls[i]);
          }
    
    
          // create the map
          var map = new GMap2(document.getElementById("map"));
          map.addControl(new GLargeMapControl());
          map.addControl(new GMapTypeControl());
          map.setCenter(new GLatLng( 43.745305,144.431763), 9);
    
    
          // Read the data from example.xml
          var request = GXmlHttp.create();
          request.open("GET", "http://n-shuhei.net/xxxx/xxx/trial.xml", true);
          request.onreadystatechange = function() {
            if (request.readyState == 4) {
              var xmlDoc = request.responseXML;
              // obtain the array of markers and loop through it
              var markers = xmlDoc.documentElement.getElementsByTagName("marker");
              
              for (var i = 0; i < markers.length; i++) {
                // obtain the attribues of each marker
                var lat = parseFloat(markers[i].getAttribute("lat"));
                var lng = parseFloat(markers[i].getAttribute("lng"));
                var point = new GLatLng(lat,lng);
                var html = markers[i].getAttribute("html");
                var label = markers[i].getAttribute("label");
                // create the marker
                var marker = createMarker(point,label,html);
                map.addOverlay(marker);
              }
              // put the assembled side_bar_html contents into the side_bar div
              document.getElementById("side_bar").innerHTML = side_bar_html;
            }
          }
          request.send(null);
        }
    
        else {
          alert("Sorry, the Google Maps API is not compatible with this browser");
        }
    
        //]]>
        </script>
    

    上のコードの赤字部分を、下のコードと置き換えれば、標準マーカーを小鳥のアイコン(この場合、カワラヒワのアイコン)で表示できることが分かった。この時、用いるイメージは、必ずしも .png ファイルだけではなく .gif ファイル、.jpg ファイルでもOKである。
    
    // Create birds marker icon
           var birdIcon = new GIcon(G_DEFAULT_ICON);
           birdIcon.image = "http://n-shuhei.net/Libraly/Icon/birds/kawarahiwa.gif";
           birdIcon.iconSize = new GSize(20, 34);
                    
    // Set up our GMarkerOptions object
           markerOptions = { icon:birdIcon };
    
    // A function to create the marker and set up the event window
          function createMarker(point,name,html) {
          var marker = new GMarker(point,birdIcon);
    

  2. このコードを入れた JavaScript は以下のようになる。
    
    <script type="text/javascript">
        //<![CDATA[
    
        if (GBrowserIsCompatible()) {
    // this variable will collect the html which will eventualkly be placed in the side_bar
        var side_bar_html = "";
        
    // arrays to hold copies of the markers and html used by the side_bar
    // because the function closure trick doesnt work there
        var gmarkers = [];
        var htmls = [];
        var i = 0;
    
    // Create birds marker icon
        var birdIcon = new GIcon(G_DEFAULT_ICON);
         birdIcon.image = "http://n-shuhei.net/xxxxxxx/Icon/birds/kawarahiwa.gif";
           birdIcon.iconSize = new GSize(20, 34);
                    
    // Set up our GMarkerOptions object
           markerOptions = { icon:birdIcon };
    
    // A function to create the marker and set up the event window
        function createMarker(point,name,html) {
        var marker = new GMarker(point,birdIcon);
         GEvent.addListener(marker, "click", function() {
          marker.openInfoWindowHtml(html);
            });
    
    // save the info we need to use later for the side_bar
        gmarkers[i] = marker;
        htmls[i] = html;
    
    // add a line to the side_bar html
        side_bar_html += '<a href="javascript:myclick(' + i + ')">' + name + '</a><br>';
            i++;
        return marker;
          }
    
    // This function picks up the click and opens the corresponding info window
        function myclick(i) {
            gmarkers[i].openInfoWindowHtml(htmls[i]);
          }
    
    // create the map
          var map = new GMap2(document.getElementById("map"));
          map.addControl(new GLargeMapControl());
          map.addControl(new GMapTypeControl());
          map.setCenter(new GLatLng(34.48675,135.490608),14);
    
    // Read the data from example.xml
          var request = GXmlHttp.create();
          request.open("GET", "http://n-shuhei.net/atelier/xxxxx/xxxxxxxx/API_kawarahiwa.xml", true);
          request.onreadystatechange = function() {
          if (request.readyState == 4) {
          var xmlDoc = request.responseXML;
    // obtain the array of markers and loop through it
          var markers = xmlDoc.documentElement.getElementsByTagName("marker");
              
          for (var i = 0; i < markers.length; i++) {
    // obtain the attribues of each marker
                var lat = parseFloat(markers[i].getAttribute("lat"));
                var lng = parseFloat(markers[i].getAttribute("lng"));
                var point = new GLatLng(lat,lng);
                var html = markers[i].getAttribute("html");
                var label = markers[i].getAttribute("label");
    // create the marker
                var marker = createMarker(point,label,html);
                map.addOverlay(marker);
              }
    
    // put the assembled side_bar_html contents into the side_bar div
              document.getElementById("side_bar").innerHTML = side_bar_html;
            }
          }
          request.send(null);
        }
    
        else {
          alert("Sorry, the Google Maps API is not compatible with this browser");
        }
    
        //]]>
        </script>
    

  3. 上の JavaScript で青色文字で示したのは、以下の3箇所である。
    • マーカーに使うアイコン
    • 地図の中心となる経度・緯度と地図の縮尺の大きさ
    • 呼びこんでくる XML ファイル
    この3箇所は作成する地図ごとに書き換えねばならない。
  4. 呼びこんでくる XML ファイルには、
    • マーカーを立てる位置(経度・緯度)
    • リンクする写真のサーバー内のありか
    • ラベル(地図の右フレームに表示する地名)
    をリストする必要がある。このファイルの編集には、私は XML Notepad というソフトを使っている。duplicate 機能があるので楽ちんである。
  5. マーカーを立てる経度・緯度の値は10進法でなければならない。これは、【隠居のGoogle Maps: Picasa を使って野鳥出現地点をプロットする】で記載した方法(2. および 3.)のように Picasa のウェブアルバムで行うと、アルバムにある写真をクリックすると、右フレームに10進法の経度・緯度が表示される。
     Picasa の写真プロパティで表示される EXIF では、表示は 60進法になっている。 Picasa のウェブアルバムの助けを借りるのは、そのためである。
  6. リンクする写真のありか(例えば、 http://n-shuhei.net/xxxx/xxxx/xxxxx.jpg )は、【野鳥の写真サムネイル】で、種別表示をして写真サムネイルの下に表示されているリンク先のエントリーのソースからコピーしてくる。これが、少々煩わしいが、仕方ない。なにかいい方法がないか考えてみたい。
     このようにして作成した小鳥マーカーが表示された地図のサンプルは、以下である。
     Example:
  7. 【野鳥の写真サムネイル】の種別名欄に、【撮影地点地図】 というボタンを置き、これをクリックするとこの地図が、新しい Window で開くようにするために、下のような別の JavaScript を使っている。
    // POPUP Window
    
    function open_win_kawarahiwa(){
    window.open("http://n-shuhei.net/atelier/xxxxx/xxxxxxxxx/API_kawarahiwa_m.htm","","
    menubar=no,toolbar=no,location=yes,status=yes,scrollbars=yes,resizable=yes,
    width=950,height=600,left=50,top=50"); }

    この JavaScripr ファイルを、【野鳥の写真サムネイル】の、種別表示をしているページのHTML の <head> 部分に次のように読み込み、
    <script type="text/javascript" src="http://n-shuhei.net/atelier/xxxxx/xxxxxxxxx/pup_kawarahiwa.js"></script>
    、【撮影地点地図】 というボタンをクリックすると地図が新しい window に開くように、<body> 部の適切な位置に、次のコードを置いた。
    <input type="button" value="撮影地点地図" onClick="open_win_kawarahiwa()">

  8. 作成した地図は、まだカワラヒワだけであるが、順次時間を見て増やしていきたいと思う。泉北ニュータウンのごく限られた地域ではあるが、記録としては面白いのではないかと思っている。
     カワラヒワのプロット地図

2010年1月30日

隠居のMT備忘録:ソースコードを縦スクロールつきコード・ボックスで表示する

 エントリーで、HTML や Javascript , XML のソースコードを記録するときには、<pre><code>?</code></pre>という形で記述している。
 私のMovable Type でのブログは、「小粋空間」さんのテンプレートを使わせてもらっている。もちろん付属しているCSS(Cascading Style Sheets)も使っている。そのCSSでの <pre> は次のように設定されている。backgroundの色は、いじっていているが。
pre {
    margin: 15px 20px 0px;
    padding: 10px;
    background: #ffffe0;
    border: 1px solid #999;
    font-size: 83.3%;
    line-height: 1.5;
    width: 100%;
    overflow: scroll;
}

 このまま、100行、200行あるソースコードを記載すると、縦に非常に間延びしたエントリーになってしまう。
 これを避ける方法をネットでサーチしてみると余りにも普通の知識なのか適切な記述が見つからなかった。もう一度 CSS の基本に立ち返って学習してみると、CSS の pre の部分に、
pre {
  ,,,,
  height: 150px;
  ,,,,
 }
 
といれればよいことが分かった。 
 が、これでは1行のコードを表示するときでも、縦 150px のボックスができてしまう。それで面倒でも、本文のHTMLで
<pre style="height: 150px"> 
とスタイルを指定すればいいことが分かった。この方法を使えば、ボックスの縦の大きさを表示するコードの行数に合わせて変えることができる。スタイルを指定しなければ、縦スクロールがなく、全てのソースコードが表示される。余りにも基本的なことなので、ブログに載せるのは恥ずかしいが、自分自身の備忘録として残しておきたい。

 なお、、<pre><code> ? </code></pre> の ? 部分(ソースコード)にある < > は、特殊文字と判定されるので、&lt; &gt;  とHTML エンコードする必要がある。
私はエンコードには、HTML エンコードフォームというサービスを使わせてもらっている。これを使うと空白文字が 、&nbsp; に、" が &quot;に、& が &amp;にエンコードされるが、エンコードされたものをそのまま Copy&Paste して使っても問題はない。
 また、いろいろな場面でソースコードを整理する必要があるが、そのようなときはシェアウエアの「秀丸エディタ」を使っている。テキストを編集する様々な機能が備わっているので、非常に便利である。

2010年1月29日

Google Maps API で旅行地図を作る:線画を描くなど

 Studio YAMAKO さんのオーナーが、昨秋、中欧(ドイツ・チェコ・スロバキア・ハンガリー・オーストリア)を旅行したときの写真をコメント付きで、12 回に分けて投稿されている。
 これを題材に、Google Maps API を使って、旅行地図を作ってみた。今まで、何回か同じような旅行地図を作成しているが、今回はいくつかの新しい試みをしてみたので、いままでに学習したことも含めて、備忘録として記録しておきたい。

 Google Maps API を使って、Web ページ上に自作地図を埋め込むには、
  • HTML(CSSを含む): 自分で Web ページが作れる。
  • JavaScript: 簡単な文法が分かる。
  • XML: タグの意味が分かるなど文法がわかる。
の知識が必要であるが、基本的な文法さえ知っておればなんとかなる。それ以上の細かいことは、ネット上で検索すれば教えてくれるサイトが沢山ある。どのサイトが親切かを知っている方が重要である。私は、英語のページであるが、 w3schools.com を重宝している。体系的によくまとめられており、独習にもってこいである。
 また、Google Maps API でWeb ページ上に地図を埋め込むには、サンプル・コードがネット上で提供されているので、これを Copy&Paste して、自分用に修正し利用すればよい。詳細な部分は、理解しようとすると学習に時間がかかる。ただ、自分用に修正するときに、上のような基本的な知識は必要だろう。
 サンプル・コードはいろいろなサイトで提供されているが、私は、これも英語のサイトであるが、"Google Maps API Tutorial" のコードを主として参照させてもらっている。自分のやりたいことが、整理された形で提供されている。
 今回、地図上に線を描くサンプル・コードは、XMLファイルを使いたいこともあって、このサイトのコードを自分なりに修正して使用した。
日本語のサイトでは、Ajax Tower の「Google Maps入門」に多くのサンプル・コードがある。
 書籍は、「Google Maps API 徹底活用ガイド」を購入した。Google Maps API の基本的なユティリティが解説されているので、理解を助けてくれる。

 今回作った地図は、次のような構成になっている。
  1. 中欧の全体地図: 訪問した都市に通常マークred-dot.pngが表示される。
    1. このマークをクリックするか、地図の右欄にある地名をクリックすると、吹き出しが表示される。
    2. 吹き出しの中に表示されている「詳細地図」をクリックすると市街地図にリンクする。
    3. 各都市間をブルーのラインで訪問順に結んでいる。
  2. 市街地図:初期に表示する地図のタイプを航空写真にしている。
    1. 地図の右欄にある場所のチェックボックスをクリックすると番号入りマークが表示される。
    2. 場所名の下の青字をクリックすると写真が lightbox 形式で表示される。
  3. いずれの地図にも、地図を拡大・縮小できるコントロール、地図のタイプを切り替えるボタン、地図の縮尺をあらわすスケールが表示されている。

   これらの地図は、上記に記したサイトからいただいてきたコードを猿まねで自分なりに修正したものである。
中欧の全体地図は、HTML ファイルのなかにある Javascript で XMLファイルを呼び込んでいる。この Javascript の中で、Google Maps API が提供するユティリティが使われている。 具体的なコードを以下に示す。

全体地図用HTML(include Google Maps API JavaScript)
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">

<head>
<style type="text/css">
    v\:* {   behavior:url(#default#VML);   }
    </style>
<title>Google Maps</title>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=???????????-TOJLbO9UBLVgjJC7W8hRCNFlWI0Fg132ssdjgyNcr14mm9hSKsn5??????????????_Ypmz1A" charset="utf-8" type="text/javascript"></script>
	
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />	

<!-- POPUP Window -->
<script type="text/javascript" src="http://n-shuhei.net/script/delcash.js"></script>

</head>

<body onunload="GUnload()">
<div align="center"> 
<table border="1" width="auto" cellspacing="0">
<thead><tr>
<td bgcolor="#FFFFCC" align="center" colspan="2"><font color="#000000"><strong><big>中欧(ドイツ・チェコ・スロバキア・ハンガリー・オーストリア)を巡る旅</big></strong><br /><small>Internet Explorer で問題が出る場合は、キャッシュを消去してください。<input type="button" value="消去方法" onClick="open_win()"></small></font></td></tr>
</thead>
<tbody>
<tr><td><div id="map" style="width: 760px; height: 500px"></div></td>
<td width ="160px" valign="top" style="color: #000000; font-size: small;" align="left">
左の地図は、Google Mapsの機能を持っています。拡大・縮小・移動ができます。下の地名をクリッ
クすると該当位置に吹き出しが出ます。吹き出しの中のリンクをクリックすると詳細地図あるいは
関連投稿に飛びます。<br /><br /><div id="side_bar"></div></td></tr>
</tbody>
</table>
</div>

<noscript><b>JavaScript must be enabled in order for you to use Google Maps.</b> However,
it seems JavaScript is either disabled or not supported by your browser. To view Google
Maps, enable JavaScript by changing your browser options, and then try again.
</noscript>

<script type="text/javascript">
    //<![CDATA[

    if ( GBrowserIsCompatible()) {
// this variable will collect the html which will eventualkly be placed in the side_bar
     var side_bar_html = "";
// arrays to hold copies of the markers and html used by the side_bar
// because the function closure trick doesnt work there
      var gmarkers = [];
      var htmls = [];
      var i = 0;

// A function to create the marker and set up the event window
      function createMarker(point,name,html) {
        var marker = new GMarker(point);
        GEvent.addListener(marker, "click", function() {
          marker.openInfoWindowHtml(html);
        });
// save the info we need to use later for the side_bar
        gmarkers[i] = marker;
        htmls[i] = html;
        // add a line to the side_bar html
        side_bar_html += '<a href="javascript:myclick(' + i + ')">' + name + '</a><br>';
        i++;
        return marker;
      }

// This function picks up the click and opens the corresponding info window
      function myclick(i) {
        gmarkers[i].openInfoWindowHtml(htmls[i]);
      }

// create the map
      var map = new GMap2(document.getElementById("map"));
      map.addControl(new GLargeMapControl());
      map.addControl(new GMapTypeControl());
      map.addControl(new GScaleControl());
      map.setCenter(new GLatLng(48.810481,14.315529), 6);
//    map.setMapType(G_HYBRID_MAP);

// Read the data from xml file
      var request = GXmlHttp.create();
      request.open("GET", "http://n-shuhei.net/????????/Polyline_ex_1.xml", true);
      request.onreadystatechange = function() {
        if (request.readyState == 4) {
          var xmlDoc = request.responseXML;
// obtain the array of markers and loop through it
          var markers = xmlDoc.documentElement.getElementsByTagName("marker");
          
          for (var i = 0; i < markers.length; i++) {
            // obtain the attribues of each marker
            var lat = parseFloat(markers[i].getAttribute("lat"));
            var lng = parseFloat(markers[i].getAttribute("lng"));
            var point = new GLatLng(lat,lng);

            var html = markers[i].getAttribute("html");
            var label = markers[i].getAttribute("label");
// create the marker
            var marker = createMarker(point,label,html);
            map.addOverlay(marker);

           }
// put the assembled side_bar_html contents into the side_bar div
          document.getElementById("side_bar").innerHTML = side_bar_html;
 
// ========= Now process the polylines =====================
          var lines = xmlDoc.documentElement.getElementsByTagName("line");
// read each line
          for (var a = 0; a < lines.length; a++) {
// get any line attributes
            var colour = lines[a].getAttribute("colour");
            var width  = parseFloat(lines[a].getAttribute("width"));
// read each point on that line
            var points = lines[a].getElementsByTagName("point");
            var pts = [];
            for (var i = 0; i < points.length; i++) {
               pts[i] = new GLatLng(parseFloat(points[i].getAttribute("lat")),
                                   parseFloat(points[i].getAttribute("lng")));
            }
            map.addOverlay(new GPolyline(pts,colour,width));
          }
// ===========================================================           
        }
      }
      request.send(null);
    }

    else {
      alert("Sorry, the Google Maps API is not compatible with this browser");
    }
// This Javascript is based on code provided by the
// Blackpool Community Church Javascript Team
// http://www.commchurch.freeserve.co.uk/   
// http://www.econym.demon.co.uk/googlemaps/

    //]]>
    </script>

   </body>
</html>

このコードでの学習した点は、114行目あたりの各都市間を訪問順に結んでいるブルーのライン(Google Maps API では、polyline という)を描くための Javascript 挿入することである。この polyline を描くのは、IE8 では次の処理をしなくてもいいらしいが、IE7 以下では、HTML 上部(head 部より前)に、
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
という記述が(斜め書き部分)必要であり、head 部分に次のスタイルを設定する必要がある。
<style type="text/css">
    v\:* {   behavior:url(#default#VML);   }
    </style>

呼び込んでくる XML ファイル
<?xml version="1.0" encoding="Shift_JIS"?>
<markers>
<marker lat="49.40187" lng="8.680401" html="Heidelberg &lt;br&gt;&lt;a href='http://n-shuhei.net/studio_yamako/?????????/maps_heidelberg.htm' target='_blank'&gt;ハイデルベルク詳細地図&lt;/a&gt;&lt;br&gt;(2009/11/2)" label="ハイデルベルク" ></marker>
<marker lat="49.379691" lng="10.180206" html="Rothenburg &lt;br&gt;&lt;a href='http://n-shuhei.net/studio_yamako/?????????/maps_rothenburg.htm' target='_blank'&gt;ローテンブルク詳細地図&lt;/a&gt;&lt;br&gt;(2009/11/2)" label="ローテンブルク" ></marker>
<marker lat="47.680125" lng="10.900841" html="Wieskirche &lt;br&gt;&lt;a href='http://n-shuhei.net/studio_yamako/?????????/091124_001.jpg'  target='_blank'&gt;Photo:ヴィース教会&lt;/a&gt;&lt;br&gt;&lt;a href='http://n-shuhei.net/studio_yamako/?????????/091124_002.jpg'  target='_blank'&gt;Photo:ヴィース教会の内部&lt;/a&gt;&lt;br&gt;(2009/11/2)" label="ヴィース教会" ></marker>
<marker lat="47.546872" lng="10.739136" html="Hohenschwangau &lt;br&gt;&lt;a href='http://n-shuhei.net/studio_yamako/?????????/maps_Hohenschwangau.htm' target='_blank'&gt;ホーエンシュヴァンガウ詳細地図&lt;/a&gt;&lt;br&gt;(2009/11/2)" label="ホーエンシュヴァンガウ" ></marker>
<marker lat="49.014906" lng="12.104187" html="Regensburg &lt;br&gt;&lt;a href='http://n-shuhei.net/studio_yamako/?????????/maps_Hohenschwangau.htm' target='_blank'&gt;レーゲンスブルク詳細地図&lt;/a&gt;&lt;br&gt;(2009/11/2)" label="レーゲンスブルク" ></marker>
<marker lat="50.082701" lng="14.422302" html="Praha &lt;br&gt;&lt;a href='http://n-shuhei.net/studio_yamako/?????????/maps_Praha.htm' target='_blank'&gt;プラハ詳細地図&lt;/a&gt;&lt;br&gt;(2009/11/2)" label="プラハ" ></marker>
<marker lat="48.810481" lng="14.315529" html="Cesky Krumlov &lt;br&gt;詳細は、&lt;br&gt;&lt;a href='http://n-shuhei.net/studio_yamako/?????????/08_1653.php' target='_blank'&gt;中欧旅行 その8 チェスキー・クルムロフ&lt;/a&gt;で。&lt;br&gt;(2009/11/4)" label="チェスキー・クルムロフ" ></marker>
<marker lat="48.143182" lng="17.112579" html="Bratislava &lt;br&gt;詳細は、&lt;br&gt;&lt;a href='http://n-shuhei.net/studio_yamako/?????????/11_0858.php' target='_blank'&gt;中欧旅行 その9 ブラスチラバ&lt;/a&gt;で。&lt;br&gt;(2009/11/5)" label="ブラスチラバ" ></marker>
<marker lat="47.495864" lng="19.050293" html="Budapest &lt;br&gt;&lt;a href='http://n-shuhei.net/studio_yamako/?????????/maps_Butapest.htm' target='_blank'&gt;ブダペスト詳細地図&lt;/a&gt;&lt;br&gt;(2009/11/2)" label="ブダペスト" ></marker>
<marker lat="48.20926" lng="16.372633" html="Viena &lt;br&gt;&lt;a href='http://n-shuhei.net/studio_yamako/?????????/maps_Viena.htm' target='_blank'&gt;ウィーン詳細地図&lt;/a&gt;&lt;br&gt;(2009/11/6)" label="ウィーン" ></marker>
<line colour="#0000ff" width="4" html="You clicked the red polyline">
   <point lat="50.107368" lng="8.686066" /> <!--フランクフルト-->
   <point lat="49.40187" lng="8.680401" /><!--ハイデルベルク-->
   <point lat="49.379691" lng="10.180206" /><!--ローテンブルク-->
   <point lat="47.680125" lng="10.900841" /><!--ヴィース教会-->
   <point lat="47.546872" lng="10.739136" /><!--ホーエンシュヴァンガウ-->
   <point lat="49.014906" lng="12.104187" /><!--レーゲンスブルク-->
   <point lat="50.082701" lng="14.422302" /><!--プラハ-->
   <point lat="48.810481" lng="14.315529" /><!--チェスキー・クルムロフ-->
   <point lat="50.082701" lng="14.422302" /><!--プラハ-->
   <point lat="48.143182" lng="17.112579" /><!--ブラスチラバ-->
   <point lat="47.495864" lng="19.050293" /><!--ブダペスト-->
   <point lat="48.20926" lng="16.372633" /><!--ウィーン-->
   <point lat="48.112933" lng="16.55777" /><!--ウィーン空港-->
</line>
</markers>


市街地図(例として、プラハ市街図)のHTML(include Google Maps API JavaScript)は、つぎのようなコードである。ここでは、XML ファイルは使っていない。(学習不足で使うことができなかった。)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" href="http://n-shuhei.net/litebox/???/lightbox.css" type="text/css" media="screen"/>
<script type="text/javascript" src="http://n-shuhei.net/litebox/???//prototype.lite.js"></script>
<script type="text/javascript" src="http://n-shuhei.net/litebox/???/moo.fx.js"></script>
<script type="text/javascript" src="http://n-shuhei.net/litebox/???/litebox-1.0.js" charset="utf-8"></script>
<title>Google Maps JavaScript API map_13</title>
<script src="http://maps.google.co.jp/maps?file=api&amp;v=2&amp;key=ABQIAAAA_--TOJLbO9UBLVgjJC7W8hRCNFlWI0Fg????????????
  mm9hSKsn5IFaeCnFgl????????????" charset="utf-8" type="text/javascript"></script> </head> <body onload="initLightbox()"> <div align="center"> <table width="auto" border="1" bgcolor="#FFFFCC"> <thead ><tr><td id="th1" colspan="2" align="middle" ><big><strong>プラハ<strong></big></td></tr></thead> <tbody align="left"> <tr><td> <div id="map" style="width:730px; height:530px"></div> </td><td width ="210px" valign="top" style="text-decoration: color: #000000; font-size: small;">左の地図は、Google Mapsの機能を持っています。拡大・縮小・移動ができます。
下のチェックボックスをチェックすると該当位置にマークが立ちます。また、青文字をクリックすると写真がでてきます。<br/><input type="checkbox" name="cb1" onClick="checkbox1clicked()">   1. プラハ城<br />   <a href="http://n-shuhei.net/studio_yamako/????????????/091130_008.jpg" title="プラハ城からの眺め" rel="lightbox[os]">プラハ城からの眺め</a><br />
<input type="checkbox" name="cb2" onclick="checkbox2clicked()"> 2. 聖ヴィート教会<br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091130_003.jpg" title="プラハ城 聖ヴィート教会" rel="lightbox[os]">聖ヴィート教会</a><br />
;   <a href="http://n-shuhei.net/studio_yamako/????????????/091130_004.jpg" title="ミュシャのステンドグラス(部分)" rel="lightbox[os]">ミュシャのステンドグラス</a><br />
   <a href="http://n-shuhei.net/studio_yamako/????????????/091130_005.jpg" title="聖ヴィート教会の祭壇" rel="lightbox[os]">聖ヴィート教会の祭壇</a><br />
   <a href="http://n-shuhei.net/studio_yamako/????????????/091130_006.jpg" title="聖ヴィート教会前景" rel="lightbox[os]">聖ヴィート教会前景</a><br/>
<input type="checkbox" name="cb3" onclick="checkbox3clicked()"> 3. 聖イジー教会<br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091130_007.jpg" title=""聖イジー教会と修道院 rel="lightbox[os]">聖イジー教会と修道院</a><br />
<input type="checkbox" name="cb4" onclick="checkbox4clicked()"> 4. カレル橋<br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091130_009.jpg" title="カレル橋 水害の跡" rel="lightbox[os]">カレル橋 水害の跡</a><br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091130_010.jpg" title="カレル橋" rel="lightbox[os]">カレル橋</a><br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091130_011.jpg" title="カレル橋の聖像" rel="lightbox[os]">カレル橋の聖像</a><br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091203_003.jpg" title="モルダウ川河畔" rel="lightbox[os]">モルダウ川河畔</a><br />
<input type="checkbox" name="cb5" onclick="checkbox5clicked()"> 5. 旧市街入口<br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091203_004.jpg" title="旧市街入口" rel="lightbox[os]">旧市街入口</a><br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091203_005.jpg" title="プラハ城を望む" rel="lightbox[os]">プラハ城を望む</a><br />
<input type="checkbox" name="cb6" onclick="checkbox6clicked()"> 6. 旧市街広場<br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091203_006.jpg" title="火薬塔" rel="lightbox[os]">火薬塔</a><br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091203_007.jpg" title="ティーン教会" rel="lightbox[os]">ティーン教会</a><br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091203_008.jpg" title="旧市庁舎の時計塔" rel="lightbox[os]">旧市庁舎の時計塔</a><br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091203_009.jpg" title="仕掛け時計" rel="lightbox[os]">仕掛け時計</a><br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091203_010.jpg" title="ヤン・フス像" rel="lightbox[os]">ヤン・フス像</a><br />
<input type="checkbox" name="cb7" onclick="checkbox7clicked()"> 7. レギー橋<br/>
   <a href="http://n-shuhei.net/studio_yamako/????????????/091203_002.jpg" title="プラハ城を眺める" rel="lightbox[os]">プラハ城を眺める</a><br />
<br />参照記事:<a href="http://n-shuhei.net/studio_yamako/????????????/01_1623.php" target="_blank">中欧旅行 その6 プラハ(1)</a></td></tr></tbody></table></div> <!-- 番号入りマーカーを表示する。-->     <script type="text/javascript">     //<![CDATA[     var map;     var marker1, marker2, marker3, marker4, marker5, marker6, marker7;     map = new GMap2(document.getElementById("map"));     map.addControl(new GLargeMapControl());     map.addControl(new GMapTypeControl());     map.addControl(new GScaleControl());     map.setCenter(new GLatLng(50.086473,14.410651),14);     map.setMapType(G_HYBRID_MAP);     var markerIcon1 = new GIcon();     markerIcon1.image = "http://n-shuhei.net/????????????/Markers/marker1.png";  //   markerIcon1.shadow = "./img/shadow.png";     markerIcon1.iconSize = new GSize(35, 40);  //   markerIcon1.shadowSize = new GSize(70, 56);     markerIcon1.iconAnchor = new GPoint(18, 40);     var markerIcon2 = new GIcon(markerIcon1, "http://n-shuhei.net/????????????/Markers/marker2.png");     var markerIcon3 = new GIcon(markerIcon1, "http://n-shuhei.net/????????????/Markers/marker3.png");     var markerIcon4 = new GIcon(markerIcon1, "http://n-shuhei.net/????????????/Markers/marker4.png");     var markerIcon5 = new GIcon(markerIcon1, "http://n-shuhei.net/????????????/Markers/marker5.png");    var markerIcon6 = new GIcon(markerIcon1, "http://n-shuhei.net/????????????/Markers/marker6.png");    var markerIcon7 = new GIcon(markerIcon1, "http://n-shuhei.net/????????????/Markers/marker7.png");     var opt1 = {icon:markerIcon1};     var opt2 = {icon:markerIcon2};     var opt3 = {icon:markerIcon3};     var opt4 = {icon:markerIcon4};     var opt5 = {icon:markerIcon5};     var opt6 = {icon:markerIcon6};     var opt7 = {icon:markerIcon7};     marker1 = new GMarker(new GLatLng(50.088814,14.395523), opt1);     marker2 = new GMarker(new GLatLng(50.090755,14.400759), opt2);     marker3 = new GMarker(new GLatLng(50.091023,14.402025), opt3);     marker4 = new GMarker(new GLatLng(50.086473,14.410651), opt4);     marker5 = new GMarker(new GLatLng(50.086129,14.413869), opt5);     marker6 = new GMarker(new GLatLng(50.087382,14.4208), opt6);     marker7 = new GMarker(new GLatLng(50.081186,14.410672), opt7);     var marker1_is_displayed = 0;     var marker2_is_displayed = 0;   var marker3_is_displayed = 0;   var marker4_is_displayed = 0;    var marker5_is_displayed = 0;    var marker6_is_displayed = 0;    var marker7_is_displayed = 0;     function checkbox1clicked() {       if (marker1_is_displayed == 0) {         map.addOverlay(marker1);         marker1_is_displayed = 1;       } else {         map.removeOverlay(marker1);         marker1_is_displayed = 0;       }     }     function checkbox2clicked() {       if (marker2_is_displayed == 0) {         map.addOverlay(marker2);         marker2_is_displayed = 1;       } else {         map.removeOverlay(marker2);         marker2_is_displayed = 0;       }     } function checkbox3clicked() {       if (marker3_is_displayed == 0) {         map.addOverlay(marker3);         marker3_is_displayed = 1;       } else {         map.removeOverlay(marker3);         marker3_is_displayed = 0;       }     } function checkbox4clicked() {       if (marker4_is_displayed == 0) {         map.addOverlay(marker4);         marker4_is_displayed = 1;       } else {         map.removeOverlay(marker4);         marker4_is_displayed = 0;       }     }     function checkbox5clicked() {       if (marker5_is_displayed == 0) {         map.addOverlay(marker5);         marker5_is_displayed = 1;       } else {         map.removeOverlay(marker5);         marker5_is_displayed = 0;       }     }     function checkbox6clicked() {       if (marker6_is_displayed == 0) {         map.addOverlay(marker6);         marker6_is_displayed = 1;       } else {         map.removeOverlay(marker6);         marker6_is_displayed = 0;       }     }     function checkbox7clicked() {       if (marker7_is_displayed == 0) {         map.addOverlay(marker7);         marker7_is_displayed = 1;       } else {         map.removeOverlay(marker7);         marker7_is_displayed = 0;       }     }    //]]>     </script> </body> </html>
 この市街地図での学習点は、最初の表示を航空写真と地図の合成(HYBRID)にすることと、番号入りのマークを表示することである。
 番号入りのマークを表示する方法については、以前のエントリーで記録している。
これだけのことをするために、基礎知識の少ない老人には、ずいぶん学習しなければならないことが多かった。痴呆予防には有効かもしれない。

 
Google Maps API徹底活用ガイド
稲葉 一浩
毎日コミュニケーションズ
売り上げランキング: 105350
おすすめ度の平均: 3.5
4 さらっと流しつつテンコ盛りの内容
3 前半は簡単。後半は難解。
4 Google Maps をゴリゴリいじってみたい人に


2010年1月14日

Google Maps API で旅行地図を作る:番号付きマーカーを使う

 昨年秋に、宍道湖をドライブしたときの旅行記はエントリーしたが、旅行地図を作ろうと思いながらできずにいた。
 最近新たな知識も取り入れて、宍道湖ドライブ地図を作製したので、備忘録として記録しておきたい。
 ツーリストがプロを使って作成していると思われる Google Maps API による地図には、数字や英字の入った Marker を格好良く使っている。私も使いたいと思っていたが、数字入りマーカーを作る方法がよく分からなかった。どこかに、できあいのものはないかと、"番号付きマーカー"というような言葉でネットサーチしていると、dLinkbRING というサイトを見つけた。そこで提供されている番号付きマーカーがもちろん使えるが、そのページに紹介されている、こんな便利なサイトにいくと自分の好きな色のマーカーに、数字あるいは英字を入れて作れるサービスが提供されていることが分かった。これで、次のような番号付きマーカーを作った。

         

 これらを地図上に表示させるには、AjaxTowerというサイトのGoogle Maps入門(Google Maps API)を参考にした。このサイトの「マーカーのアイコンを指定」の JavaScript コードを参考にして、以前に 「伊勢参り」 のエントリーで使った GoogleMaps API コードの JavaScript 部分に手を加えてみたのが、次のコードである。
<!-- 番号入りマーカーを表示する。-->
    <script type="text/javascript">
    //<![CDATA[

    var map;
    var marker1, marker2, marker3, marker4, marker5;

    map = new GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(35.430883,133.01199),10);
    map.setMapType(G_HYBRID_MAP);

    var markerIcon1 = new GIcon();
    markerIcon1.image = "http://n-shuhei.net/xxxxxxx/xxxxxx/marker1.png";
 //   markerIcon1.shadow = "./img/shadow.png";
    markerIcon1.iconSize = new GSize(35, 40);
 //   markerIcon1.shadowSize = new GSize(70, 56);
    markerIcon1.iconAnchor = new GPoint(18, 40);

    var markerIcon2 = new GIcon(markerIcon1, "http://n-shuhei.net/xxxxxxx/xxxxxx/marker2.png");
    var markerIcon3 = new GIcon(markerIcon1, "http://n-shuhei.net/xxxxxxx/xxxxxx/marker3.png");
    var markerIcon4 = new GIcon(markerIcon1, "http://n-shuhei.net/xxxxxxx/xxxxxx/marker4.png");
    var markerIcon5 = new GIcon(markerIcon1, "http://n-shuhei.net/xxxxxxx/xxxxxx/marker5.png");

    var opt1 = {icon:markerIcon1};
    var opt2 = {icon:markerIcon2};
    var opt3 = {icon:markerIcon3};
    var opt4 = {icon:markerIcon4};
    var opt5 = {icon:markerIcon5};

    marker1 = new GMarker(new GLatLng(35.469199,133.053875), opt1);
    marker2 = new GMarker(new GLatLng(35.44333,133.284674), opt2);
    marker3 = new GMarker(new GLatLng(35.444729,132.866077), opt3);
    marker4 = new GMarker(new GLatLng(35.401434,132.685919), opt4);
    marker5 = new GMarker(new GLatLng(35.377854,133.198242), opt5);
		
    var marker1_is_displayed = 0;
    var marker2_is_displayed = 0;
  var marker3_is_displayed = 0;
  var marker4_is_displayed = 0;
  var marker5_is_displayed = 0;

    function checkbox1clicked() {
      if (marker1_is_displayed == 0) {
        map.addOverlay(marker1);
        marker1_is_displayed = 1;
      } else {
        map.removeOverlay(marker1);
        marker1_is_displayed = 0;
      }
    }

    function checkbox2clicked() {
      if (marker2_is_displayed == 0) {
        map.addOverlay(marker2);
        marker2_is_displayed = 1;
      } else {
        map.removeOverlay(marker2);
        marker2_is_displayed = 0;
      }
    }
	
	function checkbox3clicked() {
      if (marker3_is_displayed == 0) {
        map.addOverlay(marker3);
        marker3_is_displayed = 1;
      } else {
        map.removeOverlay(marker3);
        marker3_is_displayed = 0;
      }
    }
	
	function checkbox4clicked() {
      if (marker4_is_displayed == 0) {
        map.addOverlay(marker4);
        marker4_is_displayed = 1;
      } else {
        map.removeOverlay(marker4);
        marker4_is_displayed = 0;
      }
    }

    function checkbox5clicked() {
      if (marker5_is_displayed == 0) {
        map.addOverlay(marker5);
        marker5_is_displayed = 1;
      } else {
        map.removeOverlay(marker5);
        marker5_is_displayed = 0;
      }
    }
   //]]>
    </script>


もともとのコードがどこかのページからいただいたコードだから、よく理解していない部分もあるが、なんとか上手く機能しているようである。 iconSize での数字を変えることで、番号付きマーカーの形が変わるようである。また、shadow もつけられる。
 このようにして「宍道湖私的観光地図」を作った。下は、その screenshot であるが、全体像は右メニューにボタンを置いたのでクリックしてみて欲しい。

なお、このGoogle Maps入門にある「マップタイプの選択」ページで示されている JavaScript, Google Maps API リファレンスのコードを参考に、初めに表示される画面を「地図+航空写真」(HYBRID) に設定した。
 Google Maps入門のサイトには、他にも少し学習すれば使えそうなインストラクションもあるので応用していきたいと思う。



2008年9月21日

隠居のMT備忘録:lightbox 2.0 の背景 overlay が黒くならない

 lightbox 2.0 の最新バージョン 2.04 の導入は失敗した。導入の手順を間違ったものと思うが、サイトそのものにアクセスできないという致命的な障害がでるので、すぐに元のバージョン 2.03 に戻した。

 そのときのドサクサにまぎれてテンプレートなどをいじったせいか、次の条件のときに、画像が現れるポップアップ画面の背景 overlay が黒くならないという現象がでた。
  • Windows XP SP2
  • Internet Explorer 7
  • MovableType 4.1 テンプレート:小粋空間:two-column-liquid-right メインページ
 アーカイブページやWindowsVista Mozilla(Firefox) では起こらない。
 上記は私の環境で、それ以外については確認していない。

 lightbox2.0 のページの support では、overlay については次の説明がある。

The shadow overlay doesn't stretch to cover full browser window.
Remove the default margin and padding from the body tag. Add body{ margin: 0; padding: 0; } to your stylesheet.

 スタイルシートでは、この設定は既に以下のようになっており、問題はなさそうである。
/* すべて */
* {
    margin: 0;
    padding: 0;
    font-family: Verdana, Arial, sans-serif;
    word-break: normal;
    line-break: strict;
}


 ネットサーチもしてみたが、的確な示唆はヒットしなかった。見当はずれであるが、「小粋空間」さんの「Lightbox JS の Movable Type での不具合を修正する」のエントリーに、コメントとして質問を投げかけてみた。親切に以下のような返事をいただいたが、結局原因不明である。
>n_shuheiさん
こんばんは。ご返事遅くなってすいません。
事象は確認できましたが、現在のところ原因不明です。

もし何か分かりましたら別途エントリーしたいと思います。
それではよろしくお願い致します。


 アクセス解析サービスの Artisan の分析では、私のサイトへの訪問者は、WindowsXP IE6/7 でのアクセスが最も多いから、早く修復したいと思ったが方途がない。

 運営している友人の2つのブログのひとつを見ていると、なんと上の条件でも、lightbox で拡大画像表示されるポップアップ画像の背景overlay が黒くなっていることが分かった。いじっているうちに偶然うまくいっていたらしい。

 このブログも同じ小粋空間:two-column-liquid-right のテンプレートを使っているので、lightbox 表示に関連していると思われるテンプレートモジュールの「ヘッダー」を子細に見てみると、正常に表示されるブログのテンプレートの<div> タグを閉じる </div> タグがひとつ少ないことを見つけた。
 どうやら、テンプレートモジュールの「ヘッダー」で<div> タグを閉じる </div> タグを余計にひとつつけたことが原因らしく思われた。テンプレートの構成上テンプレートモジュールの「ヘッダー」の<div> タグのひとつは、テンプレートモジュールの「フッター」で閉じられることになっていたのだ。

 「ヘッダー」の余計な </div> タグを削除すると上手く背景overlay が黒くなった。原因は、まったくそのせいと思っていたが、再現性を確認するために、「ヘッダー」テンプレートに余計な </div> タグをつけても、背景overlay は黒くなる。再現性はないのだ。
 どうやら修復は不可逆性だったようで釈然としないのだが、うまく表示されるようになっているので、まあ、いいか という気分である。
 ブラウザーに依存する障害は、いつもよく分からない。

2008年8月24日

隠居のBlog備忘録: MT4.1 で エントリー部分のみを印刷する

 友人から、ブログのヘッダー部分や右サイドメニューを外して、エントリー部分のみを印刷できないかの質問を受けた。確かに、ヘッダー部分や右サイドメニューが印刷されるのは少々うっとうしい。

 方法をググッテみるといつもテンプレートを使わせてもらっている「小粋空間」さんに、「印刷用スタイルシート」というカストマイズがあることが分かった。このカスタマイズは、印刷をするときには、スタイルシートを切り替える仕様になっている。MT4.1、「小粋空間」さんのテンプレート(layout-two-column-liquid-right )の私のブログ環境に導入してみたので備忘録として書き留めておきたい。
 
  1. 印刷用スタイルシート追加を追加する。
     管理画面のデザイン→テンプレート→インデックス・テンプレートの表示で「インデックステンプレートを作成」クリックして、以下のように新しいインデックス・テンプレートを作成する。
    • テンプレートの名前:ForPrinting(なんでもよい)
    • 出力ファイル名:print.css
    • 再構築オプション:チェックを外す
    • このテンプレートにリンクするファイル:(空白)
    • テンプレートの中身:スタイルシート(styles-site.css)の中身を丸ごとコピー
  2. 印刷用スタイルシートの修正
    コピーしたスタイルシートで本体のヘッド部分と右サイドメニューが印刷プレビューで表示されないように、該当スタイルのID属性、クラス属性をいじった。
     私の場合、具体的にはスタイルシートの次の項目を青字で書いた部分を付加した。
    #header 
        {
         /* padding: 15px;
        border-bottom: 1px solid #669;
        color: #999;
        background-image: url("http://n-huhei.net/Libraly/Image/Wood_ipe_01.gif");   
        background: #8fabbe; 
       text-align: left;     */
       display: none;
    }
    
    #links-left-box dl,
    #links-right-box dl {
      /*  margin: 0;
        padding: 0;   */
          display: none;
        }
    
    /* 2カラムリキッドレイアウト(右サイドバー) */
    .layout-two-column-liquid-right #content {
        /* margin: 0 250px 10px 0px;  */
        margin: 0 10px 0px;    
       /* border-bottom: 1px solid #669;
        border-right: 1px solid #669;
        background-color: #ffffff;  */
        border-style: none; 
    }

  3. テンプレートに link 要素追加
     次に、モジュールテンプレートの「ヘッダー」 <head> 部にあるスタイルシートを呼び出している部分を次の青字部分を追加した。
    実際には、この部分を先に付加しておいて、ブログのエントリーを表示し、ブラウザーのツールバー「ファイル」→「印刷プレビュー」で確認しながら print.css をいじる試行錯誤をした。
    
       <link rel="stylesheet" href="<$MTLink template="スタイルシート"$>" type="text/css" media="screen,tv" />
       <link rel="stylesheet" href="<$MTBlogURL$>print.css" type="text/css" media="print" />


  4. カスタマイズの結果
    ForPrintCSS.jpgForPrintCSS_2.jpg 左のスクリーンショットは、このカスタマイズをしていない場合とカスタマイズした後との印刷画面の比較である。
     カスタマイズした後は、ヘッダーと右サイドメニューが印刷画面に出てこないので、エントリー部分のみを印刷できる。




2008年8月18日

隠居のBlog備忘録:MT4.1 での lightbox による画像の挿入を簡略化する

 最近、友人の海外旅行の写真集をブログ Studio YAMAKO に作成していることもあって、画像の挿入する機会が増えた。MT4.1 で写真を掲載することは、MT3.3 のときに比べれば少し楽になっているが、まだいろいろと操作をしなければならない。

 私の場合、写真はブログ本文にサムネイルを掲載し、これをクリックすれば画面全体がブラックアウトして、ポップアップ的に原寸の写真が表示される lightbox というプラグインを使用しているので、その分も操作が多い。そこで、私の知識でもう少し手を抜くことはできないかググッテみた。

 MT4.1 で画像の挿入操作をしたときに自動的に貼り付けてくれるHTMLコードは下のようなコードである。
<form mt:asset-id="227" class="mt-enclosure mt-enclosure-image" style="display: inline;">
<a href="http://n-shuhei.net/studio_yamako/xxxxxx/080818_001.jpg">
<img alt="080818_001.jpg" src="http://n-shuhei.net/studio_yamako/xxxxxx/080818_001-thumb-200x132.jpg" width="200" height="132" class="mt-image-right" style="float: right; margin:  0 0 20px 20px;" /></a></form>

今までは作成してくれたコードを、次の青字のように数カ所属性を追加したり、手を加えたりしていた。
<form mt:asset-id="227" class="mt-enclosure mt-enclosure-image" style="display: inline;">
<a href="http://n-shuhei.net/studio_yamako/xxxxxx/080818_001.jpg" title="ABC" rel="lightbox[aa]">
<img alt="クリックすると大きな写真になります" src="http://n-shuhei.net/studio_yamako/xxxxxx/080818_001-thumb-200x132.jpg" width="200" height="132" class="mt-image-right" style="float: right; margin: 5px;" /></a></form>


 このように手を加えることは挿入する写真が多くなると結構な手間になる。
 「モバイルタイプ備忘録」の関連ページなどを参考に、perl なんてこれから晩学するつもりで全く分からないが、画像の挿入時に使われるソース・プログラムを覗いて、「秀丸」でいじってみた。
 ソース・プログラムは、/cgi/mt/lib/MT/Asset フォルダーにある Image.pm である。この320行目あたりにある行を青字のように変えた。
# '<a href="%s"><img alt="%s" src="%s" %s %s /></a>',
'<a href="%s" title="" rel="lightbox[]"><img alt="%s" src="%s" %s %s /></a>'

 私の場合、lightbox は 2.0 を使っているので、グループ表示のための [] とキャプション挿入の title="" を付け加えた。日本語文字列の「クリックすると大きな写真になります」を入れようとしたが、これは上手くいかなかった。 perl の勉強が必要のようだ。この挿入は、「だい」→「クリックすると大きな写真になります」とIME に単語登録して簡単化することにした。
 初期値では、サムネイル写真を表示するボックスの周囲に余白を作る style の margin が私の場合適切ではないので、この部分も先ほどのソース・プログラムで見つけて(279・282行目あたり)、次のように改定すると上手くいった。
# ' $wrap_style .= q{style="float: left; margin: 0 20px 20px 0;"};
    $wrap_style .= q{style="float: left; margin: 5px;"};

# ' $wrap_style .= q{style="float: right; margin: 0 0 20px 20px;"};
 ' $wrap_style .= q{style="float: right; margin: 5px;"};

 ソース・プログラムが少しいじれるようになったので、ブログつくりも面白みが増えたが、リスクとは隣り合わせのようだ。しっかりとバックアップをとってからいじるようにしたいと思う。それにしても、学習しなければならないことが多いので、もうちょっとの間はボケの進行が止まっていて欲しいと祈念している。

2008年8月 3日

隠居のお勉強:JavaScript(13) onerror

 梅雨明けから酷暑の日が続き、屋外での活動はほとんどできない。特に、ここ大阪堺市は全国的に見ても暑い都市で連日最高気温が35℃を超えている。老齢を自覚して、クーラーの効いた部屋で過ごすようにしている。

 幸いウェブを開いておれば退屈することはない。JavaScript の学習がおろそかになっていたので、例によって W3Schools の tutorial で再開することにした。今回は、前回に続いてエラー処理の script である。

 onerror イベントハンドラーは、エラーをキャッチしてメッセージを出す古くからの標準的な方法である。

 次はその使い方サンプルである。
<html>
<head>
<script type="text/javascript">
onerror=handleErr;
var txt="";

function handleErr(msg,url,l)
{
txt="There was an error on this page.\n\n";
txt+="Error: " + msg + "\n";
txt+="URL: " + url + "\n";
txt+="Line: " + l + "\n\n";
txt+="Click OK to continue.\n\n";
alert(txt);
return true;
}

function message()
{
adddlert("Welcome guest!");
}
</script>
</head>

<body>
<input type="button" value="View message" onclick="message()" />
</body>

</html>



上のスクリプトは、alert("Welcome guest!"); とすべきとろころが、adddlert("Welcome guest!"); となっているので、下のボタンをクリックするとスクリプトがエラーとなり、onerror イベントハンドラーが働き、エラーが表示される。



この間違ったスクリプトを訂正すると、"Welcome guest!" と本来のメッセージが表示され、エラーは表示されない。次のボタンをクリックしてみてください。



2008年7月27日

隠居のお勉強:JavaScript(12) throw

 MT のバージョンを 3.35 から 4.1 へアップグレードするのにずいぶん時間をとられて、続けていた JavaScript のお勉強がほったからしになっていた。
 過去の JavaSCript のエントリーを見直していると、 4.1 へアップグレードによってリンク切れを起こしていたり、必要なスクリプトがサーバーにアップされていなかったりしていた。それらを修復しながら復習することができた。

 W3School tutorial の続きで、今回は throw の勉強である。
  throw statement によって、例外処理ができる。前回の try....catch と一緒に使うと適切なエラー・メッセージによってプログラムを流すことができる。
 以下の例では、変数x に値を求め、x が 0 より小さかったり、10 より大きかったり、数字以外の文字がインプットされた場合に、それぞれにあったエラーを表示する。
 
<html>
<body>
<script type="text/javascript">
var x=prompt("Enter a number between 0 and 10:","");
try
{ 
if(x>10)
  {
  throw "Err1";
  }
else if(x<0)
  {
  throw "Err2";
  }
else if(isNaN(x))
  {
  throw "Err3";
  }
}
catch(er)
{
if(er=="Err1")
  {
  alert("Error! The value is too high");
  }
if(er=="Err2")
  {
  alert("Error! The value is too low");
  }
if(er=="Err3")
  {
  alert("Error! The value is not a number");
  }
}
</script>
</body>
</html>


 上の例を実行するボタンを作ってみた。Script は外部化し<head> 部で呼び出している。 

 

 ボタンをクリックしたときに、上の js を実行するためには、関数化しておかねばならない。作った関数は以下である。
// throwEx sample
function throwEx()
{
  ・
  ・
(上の青字部分)
  ・
  ・
}


これを<body> で実行するボタン(上のボタン)を置く、HTML は、次のコードである。
<input type="button" onclick="throwEx()" value="throw statement Sample" />


2008年7月22日

隠居のBlog備忘録:MT4.1 で TagCloud ページをつくる

 MT3.3 のときに、はじめて TagCloud を設置したときはかなり苦労した。

 MT4.1 では「小粋空間」さんのテンプレート・セットの "two-colomn-liquid-right" を使わせてもらっている。TagCloud は右サイドメニューの中で表示する仕様になっている。Msajii's Blog のようにタグ(キーワード)が多いと「小粋空間」さんの「タグクラウドの折りたたみ for Movable Type 4」を使わせてもらって、折りたたみができる。ただ、私の場合はメッシュを細かくしてタグ(キーワード)をつけたので700 ちかくになっているから、全てを表示すると縦に長くなってしまう。

 それで、MT3.3 のときのようにページで表示できないかネットをググッテみたが、適切なインストラクションがヒットしなかった。それでもいろいろなページを参考に、MT3.3 のときに使っていた「小粋空間」さんの「Movable Type 3.3 エントリー・タグ詳説」のコードを使って、TagCloud ページを作るとうまくいったので備忘録的に書き留めておきたい。

 わかってみれば設置は簡単である。
  1. 方法はインデックステンプレートを新しく作るのである。(追記:2013/1/22)。インデックステンプレートのメインページをまるまる C&P して、新しく名前は何でもいいのだが、TagCloud とでもし、出力ファイル名はこれも名前は何でもいいのだが tagcloud_page.php としてインデックス・テンプレートに保存する。
  2. このテンプレートページの下記の部分を削除し、
    <MTEntries>
       <$MTEntryTrackbackData$>
       <$MTInclude module="ブログ記事の概要"$>
    </MTEntries>
    

    「Movable Type 3.3 エントリー・タグ詳説」の下方にある次のコードを挿入する。
    <div class="module-tagcloud module">
        <h2 class="module-header">Tag cloud</h2>
        <div class="module-content">
            <ul class="module-list">
                <MTTags>
                    <li class="module-list-item taglevel<$MTTagRank$>">
                        <a href="<$MTTagSearchLink$>"><$MTTagName$></a>
                    </li>
                </MTTags>
            </ul>
        </div>
    </div>
    <h2> Tag Cloud </h2> の部分には、TagCloud の説明などに変更できる。
  3. スタイルシートには、次のCSS を追加する。
    /* (タグクラウド用) */
    
    .module-tagcloud .module-content a {text-decoration: none; }
    .module-tagcloud .module-content {text-align: left; }
    .module-tagcloud .module-content .module-list { list-style: none; }
    .module-tagcloud .module-content .module-list .module-list-item { display: inline; }
    .module-tagcloud .module-content .module-list li.taglevel1 { font-size: 32px; }
    .module-tagcloud .module-content .module-list li.taglevel2 { font-size: 28px; }
    .module-tagcloud .module-content .module-list li.taglevel3 { font-size: 24px; }
    .module-tagcloud .module-content .module-list li.taglevel4 { font-size: 20px; }
    .module-tagcloud .module-content .module-list li.taglevel5 { font-size: 16px; }
    .module-tagcloud .module-content .module-list li.taglevel6 { font-size: 12px; }
    
    .module-tagcloud .module-content .module-list li.taglevel1 a{ color: #000000; }
    .module-tagcloud .module-content .module-list li.taglevel2 a{ color: #0000ff; }
    .module-tagcloud .module-content .module-list li.taglevel3 a{ color: #000000; }
    
    表示するフォントの大きさや色は、ここでいじれる。ランクの区分は6段階が初期値である。
  4. 作ったページへのパス(私の場合:http://n-shuhei.net/atelier/tagcloud_page.php )でブラウザに TagCloud ページが表示できれば成功である。
  5. あとは適当な位置に TagCloud ページへのリンクボタンを設定すれば終わりである。右サイドにボタンを置いたので、サンプルはそちらをみて欲しい。


2008年6月24日

隠居、MT4.1 でのコメント編集HTMLタグボタンを設置

 MT3.3 のときには、コメント入力ボックスの縁に、HTMLタグボタンをカストマイズで設置していた。MT4 にバージョンアップして、新たに「小粋空間」さんの MT4.1 テンプレートセットを導入したが、「コメント入力フォーム」には、このHTMLタグボタンがついていない。

 コメントも単純なテキスト文書でなく、冗長な絵文字までいらないが、文字の一部分を太字にしたりリンクを張ったりしたい。HTMLタグは使える設定にしているので、タグを書けばよいのだがいちいち面倒である。それで、新しい「コメント入力フォーム」にもHTMLタグボタンをつけることにトライすることにした。

 「MT4 コメント編集ボタン」でググルとすぐにでもありそうなのに的確にヒットしない。そこで、MT3.3 のときにお世話になった「小粋空間」さんの「コメントにHTMLタグ挿入ボタンをつける(改)」を参考にさせてもらって、MT4 に応用してみた。カスタマイズの記録として記しておきたい。

 「小粋空間」さんのエントリーの順に従って、変更した部分を書き留めたい。
  1. コメント欄でのHTMLタグの使用を有効にする。
    →MT4 では、「ブログの設定」→「コメント」→「コメントポリシー:HTMLを許可」をチェック
  2. 編集ボタン用画像のコピー
    →バックアップでおいてあった MT3.3 のときのファイルを <$MTBlogURL$> (私の場合:http://n-shuhei.net/atelier/ )に images フォルダーを作ってアップした。
  3. JavaScriptファイルの作成>
    →提供されている JavaScript のスクリプトを秀丸に文字コードを UTF-8 として Copy&Paste とし、ファイル名を commentButton.js として保存した。このファイルを <$MTBlogURL$> のフォルダーにアップした。
  4. 編集ボタン表示スタイルの追加
    →提供されているコードをスタイルシート(styles-site.css)に追加した。ただし、実際の表示をみて、以下のコードの赤字部分を修正した。
    /*  field buttons */
    .field-header {
        width: 400px; /* ボタンを配置するエリアの幅 */
        height: 30px; /* ボタンを配置するエリアの高さ */
        position: relative;
    }
     
    .field-label {
        position: absolute;
        bottom: 30px;
        left: 0px;
    }
     
    .field-buttons {
        position: absolute;
        bottom: 0px;
        right: 0px;
    }
     
    .field-buttons img {
        border: 0;
        margin: 0px 0px 0px 3px;
    }
    

  5. テンプレートの修正(JavaScriptファイルのインクルード追加)
    →モジュール・テンプレート 「ヘッダー」の </head> 直前に、
    <script type="text/javascript" src="<$MTBlogURL$>commentButton.js" charset="utf-8"></script> 
    
    を挿入した。

  6. テンプレートの修正(個別エントリーアーカイブへ編集用ボタン設定)
    →モジュール・テンプレートの「コメント入力フォーム」の次の部分をコメントアウトし、その直後に提供されているコードを挿入した。
     <!--<p id="comments-open-text"><label for="comment-text">コメント:<MTIfAllowCommentHTML>(スタイル用のHTMLタグが使えます)</MTIfAllowCommentHTML></label>-->
    
    <div class="field-header">
    コメント:
    <div class="field-buttons">
    <a title="太字" href="#" onclick="return formatStr(document.comments_form.text, 'strong')"><img class="button" src="<$MTBlogURL$>images/html-bold.gif" alt="太字" width="22" height="16" /></a>
    <a title="イタリック" href="#" onclick="return formatStr(document.comments_form.text, 'em')"><img class="button" src="<$MTBlogURL$>images/html-italic.gif" alt="イタリック" width="22" height="16" /></a>
    <a title="アンダーライン" href="#" onclick="return formatStr(document.comments_form.text, 'u')"><img class="button" src="<$MTBlogURL$>images/html-underline.gif" alt="アンダーライン" width="22" height="16" /></a>
    <a title="ハイパーリンク" href="#" onclick="return insertLink(document.comments_form.text)"><img class="button" src="<$MTBlogURL$>images/html-link.gif" alt="ハイパーリンク" width="22" height="16" /></a>
    <a title="引用" href="#" onclick="return formatStr(document.comments_form.text, 'blockquote')"><img class="button" src="<$MTBlogURL$>images/html-quote.gif" alt="引用" width="22" height="16" /></a>
    </div>
    </div>
    
    

以上で、「コメント入力フォーム」にコメント編集ボタンは表示されるようになった。MT4 では、「コメント入力フォーム」がモジュール化されているので、コメントの「確認」画面でも、コメント編集ボタンは表示される。
(追記:2009/3/2)サインインなしのコメントのための Captcha を設定したときに、HTMLタグのアイコンが消えてしまっていたので、修正した。また、一部の記述を変更した。

2008年6月20日

カストマイズの履歴

 このページでは 2006年の1月から私のHomePageに手を入れた事柄について、備忘録的に記載していくつもりである。したがってこのページは、頻繁に再編集されるはずである。

  1. MovableTypeのデータベースをMySQL4 から MySQL5 へバージョンアップした。
    (2011/3/25)難易度 ★★★☆☆
  2. Google Maps API を使って野鳥出現地点をカスタム・マーカーでプロットすることを始めた。
    (2011/1/29)難易度 ★★★★☆
  3. 撮影場所別に分類した野鳥写真集のウェブページを作成した。
    (2010/11/30)難易度 ★★☆☆☆
  4. Studio YAMAKO と Masajii's Blog のタグクラウド・ページを作成し、変更した。
    (2010/7/10)難易度 ★★☆☆☆
  5. atelier のアクセスカウンターを Kent Web の Daycounter に変更した。
    (2010/7/4)難易度 ★★★☆☆
  6. Google Maps API 用の XML ファイルを編集するXML Notepad 2007 を導入した。
    (2010/6/24)難易度 ★★★☆☆
  7. Research Artisan のサービスが2010年5月28日に終了するのに伴い、オープンソースのReasearch Artisan Lite を導入した。試験的に、Studio YAMAKO のアクセス解析に使用を開始した。
    (2010/4/11)難易度 ★★★☆☆
  8. IE8 に変えてからメインページの写真表示で lightbox の背景が黒くならないという不具合が生じていた。メインページで表示するエントリー数を10 に変更することで解決した。そのときに得た知識で、lightbox の背景画像を黒紙から図柄に変更した。
    (2010/3/21)難易度 ★★☆☆☆
  9. IE8 に変えてから、ページのソースを秀丸に表示することができなくなっていた。ネットで見つけた方法で、秀丸を指定することができた。
    (2010/2/19)難易度 ★★☆☆☆
  10. 日本では、eMusic から音楽ファイルをダウンロードできなくなった
    (2010/2/16)難易度 ☆☆☆☆☆
  11. ページでテーブルを作り縦にセルを連結するコードが分かった。
    (2010/2/11)難易度 ★★☆☆☆
  12. Live365 の放送が流している曲を録音し、MP3ファイル化する新しい方法を見つけた。
    (2010/2/7)難易度)★★★★☆
  13. ページにコードを表示する枠を指定する方法が分かった。
    (2010/1/30)難易度 ★★☆☆☆
  14. Google Maps API で作成する地図に改善を加えた
    (2010/1/29)難易度 ★★★★☆
  15. Windows XP のPCに IE8 をインストールした。
    (2010/1/7)難易度 ★★☆☆☆
  16. 野鳥識別掲示板へのリンクを右メニューに設置した。
    (2010/1/5)難易度 ★☆☆☆☆
  17. コメントする人が Google のアカウントを持っておれば認証できるようになった。
    (2009/12/27)難易度 ★★☆☆☆
  18. ブログ・ページから管理者にGoogleMail で発信する方法が分かった。
    (2009/12/10) 難易度 ★★☆☆☆
  19. 野鳥写真サムネイルを場所別・科別に変更し、ブログ外HTMLページに変更した。
    (2009/11/30) 難易度 ★★★★☆
  20. Live365 の LinkWidget をページの右メニューに設定した。
    (2009/11/30) 難易度 ★☆☆☆☆
  21. ウエブページ泉北近辺私的観光地図での地名表示XMLファイルを「あいうえお順」に並び替えた。
    (2009/8/26)難易度 ★★☆☆☆
  22. Studio YAMAKO の蝶の写真を科別に分類したリストをブログ外の Web Page として作成(異なるタイトル写真とするため)し、メニューにリンクボタンを設置した。
    (2009/8/23)難易度 ★★☆☆☆
  23. <
  24. Studio YAMAKO のタイトル画像を Flash 8 を使って変更した。
    (2009/7/9)難易度 ★☆☆☆☆
  25. 右メニューのJazz Collection へのリンクボタンを Radio Senboku Playlist へのリンクボタンに変更した。
    (2009/2/2)難易度 ★☆☆☆☆
  26. 右メニューに「播磨の蝶・但馬の蝶」および「ことりのさえずり」サイトへのリンクボタンを追加した。
    (2009/6/17)難易度 ★☆☆☆☆
  27. コメント入力フォームに、CAPTCHA を追加した。
    (2008/11/10)難易度 ★★☆☆☆
  28. 動画(AVIファイル)を編集してブログにアップした。
    (2008/10/22)難易度 ★★☆☆☆
  29. 野鳥の写真集をテーブル形式に改めた
    (2008/9/2)難易度 ★★☆☆☆
  30. 居間に新しいスタイルのPC:VGC-LM52DB を設置した。
    (2008/8/26)難易度 ★☆☆☆☆
  31. エントリー部分のみを印刷できるように、インデックス・テンプレートに印刷用CSSを置いた。
    (2008/8/24)難易度 ★★★☆☆
  32. /cgi/mt/lib/MT/Asset フォルダーにある Image.pm をいじって lightbox による画像の挿入を簡略化した。
    (2008/8/18)難易度 ★★★☆☆
  33. 英語での spamtrackbacks を阻止するために、asciiTBPingfilter プラグインを導入した。
    (2008/8/15)難易度 ★☆☆☆☆
  34. サイドメニューのリンクをJavaScript から再度CSSによる表示に置き換えた。少し、すっきりした。
    (2008/8/7)難易度 ★★☆☆☆
  35. Blog Atelier のヘッダー部分リンクを JavaScript から再度CSSによる表示に置き換えた。
    (2008/8/6)難易度 ★★☆☆☆
  36. TagCloud のページを作成し、リンクボタンを右サイドバーに置いた。
    (2008/7/22)難易度 ★★★☆☆
  37. 山小屋周辺の地図を Google Maps API で作成し、右サイドメニューにリンクボタンを設置した。
    (2008/7/6)難易度 ★☆☆☆☆
  38. Jazz Collection List をブログ atelier のウェブページとして作成し直し、public_html フォルダーの .htaccess にリダイレクトを設定した。
    (2008/7/14)難易度 ★★★☆☆
  39. エントリーにHTML のコードを書くことが多くなっている。それむけのタグ <pre> <code> を初めて使った見た
    (2008/7/78)難易度 ★☆☆☆☆
  40. 「DIY作品集」をブログ Atelier のウェブページに移した。ブログ Atelier フォルダーにある .htaccess に、RedirectPermanent を設定した。
    (2008/7/76)難易度 ★★☆☆☆
  41. ブログ記事/ウェブページの日付を公開日時に自動変更する藤本壱さんのプラグインを導入した。
    (2008/7/6)難易度 ★★☆☆☆
  42. .htaccess のリダイレクト機能を使って、元のブログへの訪問者を新しいブログへ誘導する設定を行った。Masajii's blog, Studio YAMAKO も同様の設定にした。
    (2008/7/4)難易度 ★★★★☆
  43. Studio YAMAKO のページを MT4.1 に合わせてリフォームした。
    (2008/7/1)難易度 ★★★☆☆
  44. Kinarie&May さんのMT用横長Flashカレンダーを復活させた。
    (2008/6/29)難易度 ★★★☆☆
  45. Research Artisan の「昨日のページ別アクセス・ランキング(Best10)」というタグを右サイドに貼り付けた。
    (2008/6/25)難易度 ★★☆☆☆
  46. MT3 の時に設定していたコメント編集HTMLタグボタンを設置した。
    (2008/6/24)難易度 ★★☆☆☆
  47. MT3 のときに設定していた行末の禁則処理をCSS に設定した。
    (2008/6/22)難易度 ★★☆☆☆
  48. 「キリ番カウンター」を設置した。
    (2008/6/22)難易度 ★★★☆☆
  49. 6月10日以来、新たなテンプレート・セットに合わせて、種々のカスタマイズを行った。
    (2008/6/22)難易度 ★★★★★
  50. MT4.1 のテンプレートセットを「小粋空間」さん提供のMT4用に変更した。
    (2008/6/10)難易度 ★★★★★
  51. MT3.35 から MT4.1 へ苦戦しながらバージョンアップした。
    (2008/6/3)難易度 ★★★★★
  52. MT4.1へのグレードアップに備えて、データベースを SQLite から MySQL に変更した。
    (2008/5/18)難易度 ★★★☆☆
  53. スパムコメント対策に入れていた SCode が上手く機能しないので、代わりに reCaptcha を導入した。
    (2008/5/13)難易度 ★★★☆☆
  54. レンタルサーバーを lolipop から xserver に変更した。
    (2008/5/10)難易度 ★★★★☆
  55. ParseError の原因発見方法が分かった。
    (2008/5/10)難易度 ★★★☆☆
  56. デジカメで撮った写真の一部が読み取れなかったが、「完全データ復元PRO2008」というソフトを導入して復元した。
    (2008/5/6)難易度 ★★★☆☆
  57. この CusomizeHistory の降順番号は、Mojilla 系の Firefox Netscape で番号が倍になる現象が出ていたが、JavaScript の勉強で原因がわかり修正した。
    (2008/3/31)難易度 ★★★☆☆
  58. JavaScript switch構文の勉強で、タイトル部横長カレンダー横に、本日の曜日を表示するようにした。
    (2008/3/21)難易度 ★★☆☆☆
  59. JavaScript の if...else if....else statement の勉強で、アクセス時刻によって歓迎の言葉が変化するスクリプトをタイトル部分に設置した。
    (2008/3/20)難易度 ★★☆☆☆
  60. Kinarie&May さんの「MT用フォトサムネイラー1.20」Studio YAMAKO のカテゴリーButterfly に適用した。
    (2008/3/11)難易度 ★★★☆☆
  61. Blog 右サイド リンクボタンを集合Flash Button(Title Menu と同様に)に改訂。
    (2008/2/24)難易度 ★★☆☆☆
  62. Blog Title 下のメニューボタンを Flash ボタンに変更した。
    (2008/2/24)難易度 ★★★☆☆
  63.  [新作!] という日本語Flashバナーを、Flash8 で作成し、タイトル・メニューで使用した。
    (2008/1/22)難易度 ★★☆☆☆
  64.  SoundEngine のスクリプト・コードを、体裁よくエントリーに取り入れるために、スタイル・シートに、div#menu というID属性を作成した。
    (2008/1/18)難易度 ★★★☆☆
  65.  [New!] というFlashバナーを、SoThinkQuicker で作成し、右サイドメニューで使用した。
    (2008/1/16)難易度 ★★☆☆☆
  66.  P4P800 SE のパソコンの電源が機能しなくなったので、新しい電源と交換した。ついでに、DiskのIDEケーブルをスマート・ケーブルに変えた。
    (2008/1/4)難易度 ★★★☆☆
  67.  P4P800 SE のパソコンのディスクに、もうすぐ壊れるかもしれないという SMART の警告が出たので、システム・ディスクの交換をした。
    (2007/12/29)難易度 ★★★★☆
  68. メインページもTagCloud のページへのリンクボタンを右サイドに設置した。
    (2007/11/8)難易度 ★☆☆☆☆
  69. P4P800 SE のパソコンの立ち上げ時に、CMOS Checksum error が出るので、マザーボード内蔵電池を交換した。
    (2007/10/29)難易度 ★★★☆☆
  70. TagCloud のページを作り、エントリー・カテゴリー・日別アーカイブの各テンプレートの右サイドにリンクボタンを設置した。
    2007/10/20)難易度 ★★☆☆☆
  71. 友のブログ Masajii's Weblog を開設した。
    (2007/10/16)難易度 ★★★☆☆
  72. TagCloudは、トップページのタイトル下に移設した。
    2007/10/8)難易度 ★☆☆☆☆
  73. Tag Cloud を右サイドメニューに設置した。
    (2007/9/13)難易度 ★★★★☆
  74. Studio Yamako のオーストリア・イタリア旅行写真集を Google Maps API を使って地図上に訪問地をマップした。
    (2007/8/20)難易度 ★★☆☆☆
  75. lightbox画像のキャプションにリンクが張れることが判明。最新のエントリーで実施した。
    (2007/7/5)難易度 ★★☆☆☆
  76. liteboxを使った写真表示に、白い点々(white noise) がでることがわかった。いろいろな調査の結果、lightbox2 に変更することによって解消することが分かった。
    (2007/6/20)難易度 ★★★★☆
  77. Atelier Shuhei Weblog の右メニューリンクボタンをサイト内とサイト外に分け、サイト内ボタンを統一した。クリックすると音が出るようなフラッシュボタンにした。
    (2007/6/15)難易度 ★★☆☆☆
  78. Studio YAMAKO にWeb Access Counter を設置した。
    (2007/5/25)難易度 ★☆☆☆☆
  79. Studio YAMAKO の背景色など変更に伴うコメントフォーム・メッセージ文字色を mt-site.js の一部を弄った
    (2007/5/24)難易度 ★★★☆☆
  80. Studio YAMAKO に、Kinarie&MayさんのFlash通常型のカレンダーを導入した。
    (2007/5/22)難易度 ★★☆☆☆
  81. yamakoさんの写真掲載用ブログ(Studio YAMAKO)を新たに設定した。本体(Atelier Shuhei Weblog)と同じようなカスタマイズを設定するのに手間取った。
    (2007/5/22)難易度 ★★★★☆
  82. DIY作品集へのリンクボタンを Flash8 で作成し、右サイドに設置した。効果音に、Effect Sound 集から、手ノコで木を切る音を挿入した。
    (2007/5/6)難易度 ★★☆☆☆
  83. Live365のキャンペーン Save Internet Radio に賛同し、バナーを右サイドに設置した。
    (2007/5/3)難易度 ★☆☆☆☆
  84. MT3.33-ja から MT3.35-ja にバージョンアップした。
    (2007/4/21)難易度 ★★☆☆☆
  85. Live365 での Radio Senboku の放送曲目を4分の1程度変更した。Album1 ? 3 までの曲目で前回とは異なるアーティストにした。
    (2007/4/20)難易度 ★★☆☆☆
  86. Google Maps API による「京都・奈良私的観光地図」の作成に伴い右サイドメニューのリンクボタンを改訂した。
    (2007/4/18)難易度 ★★☆☆☆
  87. Kinarie&Mayさんの横長カレンダーが Version3.00 にされたので導入した。
    (2007/4/10)難易度 ★★☆☆☆
  88. 「音楽方丈記」に紹介されている Snap Preview Anywhere を導入した。
    (2007/3/12)難易度 ★★☆☆☆
  89. 「小粋空間」さんの「追記文章を折りたたむ」を参照して、追記文書の折りたたみをエントリーアーカイブのテンプレートに取り入れた。
    (2007/3/8)難易度 ★★☆☆☆
  90. Navi button にオンマウスするとリンクの説明がでるように、title="xxx" を加えた。
    (2007/3/6)難易度 ★☆☆☆☆
  91. Navi button に Radio Senboku を加えた。
    (2007/2/11)難易度 ★☆☆☆☆
  92. Live365.com というサイトと契約し Radio Senboku を立ち上げた。
    (2007/2/6)難易度 ★★★★☆
  93. さくらインターネットとレンタル・サーバー契約をして、こちらに Radio Senboku を設置し.htaccess でアクセス制限を設定した。
    (2007/1/28)難易度 ★★★☆☆
  94. Radio Senboku と称する MP3ストリーミング・ファイルを置くアクセス制限付きページ:http://n-shuhei.net/sound/Radio/Radio_senboku.htm を設置した。
    (2007/1/24)難易度 ★★★★☆
  95. Web Radio の実験のために、IDとPWがなければアクセスできないページを、lolipop のマニュアルで作った。.htaccess ファイルの設置である。
    (2007/1/24)難易度 ★★★☆☆
  96. Toshibo's Web Radio のリンクボタンを右サイドメニューに置いた。
    (2007/1/19)難易度 ★☆☆☆☆
  97. AffliateB が、JTB-CTW のアフリエートを募集していたので応募した。
    (2007/1/10)難易度 ★☆☆☆☆
  98. HP作成とは直接関係ないが、GoogleのWeb Mail Gmail に登録した。他のアドレスからの転送をそれぞれ設定した。
    (2007/1/6)難易度 ★★☆☆☆
  99. 右サイドメニューに置いているリンク部分のボタンのFlash8を自作でデザインを統一した。
    (2007/1/5)難易度 ★★★★☆
  100. ヘッダー部分に、タブメニューNavi button を設置した。
    (2006/12/29)難易度 ★★★★☆
  101. 右サイドメニューのリンク部分に、管理者へのメール(mailto:shuhei@n-shuhei.net)ボタンをFlash8で作成し置いた。
    (2006/12/12)難易度 ★★☆☆☆
  102. 右サイドメニューに置いている「泉北近辺私的観光地図」のボタンをFlash8を使って作り直した。
    (2006/11/30)難易度 ★★☆☆☆
  103. DIY作品集のエントリーへのリンクFlashボタンを右サイドメニューに置いた。
    (2006/11/30)難易度 ★☆☆☆☆
  104. リタイア後の知人が人材バンクを通じて再就職したWeb関連会社のサイトに、AffliateBというアフリエート・パートーナーを求めてるサービスがあったので応募した。
    (2006/11/30)難易度 ★☆☆☆☆
  105. Google Maps API を使って Blog の外に「泉北近辺私的観光地図」というページを作り、Blog 右サイドメニューにリンクボタンを設置した。
    (2006/11/24)難易度 ★★☆☆☆
  106. Favicon が、IE7 でも確認できるようになった。コメント・トラックバックにも Favicon を表示するようにした。
    (2006/11/23)難易度 ★★★☆☆
  107. Google Maps API に litebox を組み合わせることができた。
    (2006/11/20)難易度 ★★★★☆
  108. 簡単なFavicon を作って設置したが、Firefox, Netscape では確認できたが、IE7では表示されない。
    (2006/11/12)難易度 ★★☆☆☆
  109. Google Maps API をなんとか「泉北の紅葉」エントリーで実験的に利用できるようになった。
    (2006/11/12)難易度 ★★★★☆
  110. 自分のホームページ作成環境を別窓で表示するボタンを「5・6年生にもわかるやさしいJavaScript」で紹介されている方法で作成した。
    (2006/11/7)難易度 ★★☆☆☆
  111. Google MAP のキャプチャーで創っていた地図は、著作権に抵触する恐れがあるので、 ZENRIN の規約に基づく地図に差し替えた。
    (2006/11/7)難易度 ★★☆☆☆
  112. ロリポップの開設5周年記念のホームページ・コンテストに応募した。
    (2006/11/3)難易度 ★☆☆☆☆
  113. このカスタマイズ履歴ページでのリスト番号を降順にする方法をサーチしてHatena::Questionで見つかったJavaScriptを導入したら上手くいった。
    (2006/11/3)難易度 ★★☆☆☆
  114. プロファイルのページを カストマイズの履歴 と同じようにテンプレートで作った。プロに描いてもらった似顔絵をこのページに貼った。
    (2006/11/1)難易度 ★★☆☆☆
  115. 著作権保護のための(保護するような著作はありませんが)Creative Commons Liscense を導入しマークを右サイドメニューに設置した。
    (2006/10/30)難易度 ★☆☆☆☆
  116. TinyMCE のインストールによって IE ででていた JavaScript エラーの原因が判明した。
    (2006/10/28)難易度 ★★★☆☆
  117. mixi に登録した。
    (2006/10/28)難易度 ★☆☆☆☆
  118. エントリー編集用のプラグイン TinyMCE をインストールした。
    (2006/10/24)難易度 ★★☆☆☆
  119. IE を6から7に upgrade した。機能には問題ないが、MT の管理画面を開くとJavaScript エラーがでる。
    (2006/10/24)難易度 ★☆☆☆☆
  120. ページ内リンクを習得した。リンクされる場所には、<a name="abc">ABC</a>とし、リンクする場所には<a href="#abc">ABC</a>とする。他のページ内へのリンクは、リンク先ページURL名の後に#abcをつければよい。HTMLの基本だと思いますが、今頃になって。
    (2006/10/21)難易度 ★☆☆☆☆
  121. BlogTemplateWindow3.3がスペック通りに動かなかったのは、BigPAPI と Transfomer との競合が原因しているようだ。H.Fujimoto さんの TransfomerTest を入れても上手くいかないので、BigPAPI の利用を止めたら上手くいった。
    (2006/10/21)難易度 ★★★☆☆
  122. lolipop やさくらネットなどで例示されているFTPソフトのFFFTPをDLし導入した。
    (2006/10/20)難易度 ★★☆☆☆
  123. いただいたトラックバックを別窓で見えるように、エントリー・テンプレートを弄った。
    (2006/10/10)難易度 ★☆☆☆☆
  124. BlogTemplateWindow3.3 がどうもスペック通りに動かないので、 native template editor に戻した。
    (2006/10/9)難易度 ★☆☆☆☆
  125. ASCII 文字のみのトラックバックをフィルタリングする(迷惑トラックバックにもフィルタリングしない)「小粋空間」さんの Movable Type プラグイン asciiTBPingfilter を導入した。
    (2006/10/8)難易度 ★☆☆☆☆
  126. FEP を使ってエントリーのHTMLコード編集を始めた。
    (2006/10/6)難易度 ★☆☆☆☆
  127. エントリーを編集するときに、エントリー編集画面の右上にある強調文字やハイパーリンク等のタグを挿入するリンクをクリックすると、ページの先頭に戻ってしまうという現象を回避するために Invalidate link of insert tag というプラグインをインストールした。
    (2006/10/6)難易度 ★☆☆☆☆
  128. BlogTemplateWindow for MT3.3 が作動するようになった。
    (2006/10/4)難易度 ★★★☆☆
  129. テンプレートを編集するプラグインのBlogTemplateWindow が上手く動いていないので、英語のサイトであるがコメントで質問した。その返事を blog にくれるというのでスパム対策で入れていた日本語の入っていないコメントは拒否するプラグインを外した。
    (2006/10/3)難易度 ★☆☆☆☆
  130. MT3.3-ja にクロスサイトスクリプティングの脆弱性があるとのことで、万が一を考え MT3.33-ja にアップグレードすることにした。
    (2006/10/2)難易度 ★★★☆☆
  131. KInari&Mayさんが提供してくれているFlash天気予報をサイドメニューに設置した。
    (2006/9/30)難易度 ★★☆☆☆
  132. Amazon おまかせリンクを元のサーチボックスに戻した。
    (2006/9/30)難易度 ★☆☆☆☆
  133. 「小粋空間」さんのBlogPeople のススメにしたがって Blogpeople に登録した。利用の仕方がよくよく分かっていないが、LinkList と ListMe を右サイドバーに置いてみた。
    (2006/9/14)難易度 ★★☆☆☆
  134. バナー広告不要・アクセス解析ツール「Research Artisan」を取り入れた。
    (2006/9/12)難易度 ★★☆☆☆
  135. Jazz Collection Listページの改良がほぼ終わった。
    (2006/8/29)難易度 ★★☆☆☆
  136. Artisan というアクセス・ログ解析を導入することにした。
    (2006/8/20)難易度 ★★☆☆☆
  137. 右サイドバーのリンクに、Jazz Collection ListページへのFlash Button を設置した。
    (2006/8/14)難易度 ★★☆☆☆
  138. まだベータ版だが Amazon おまかせリンクに変更してみた。
    (2006/8/8)難易度 ★☆☆☆☆
  139. 作者がフランス人の dewplayer という Flash MP3 Player を設置した。
    (2006/8/8)難易度 ★★☆☆☆
  140. FLASH SINGLE MP3 PLAYERという新しいMP3 Player を設置した。
    (2006/8/7)難易度 ★★☆☆☆
  141. HPのJazz Collection Listで主題となるメロディが聞こえるようにした。
    (2006/8/5)難易度 ★★★☆☆
  142. フォルダーごとサーバーにアップロードするFTPソフトとして、InternetExplorer を使うようにした。
    (2006/8/1)難易度 ★☆☆☆☆
  143. DIY作品集をLitebox-1.0を利用してテーブルで編集した。
    (2006/7/24)難易度 ★★★☆☆
  144. 新しいFlash MP3 Player Play [Tagger by del.icio.us] を見つけ導入した。
    (2006/7/20)難易度 ★★☆☆☆
  145. Flashの作成ソフト Macromedia Flash 8 Basic を泣く泣く導入した。お試し版(お試し期間が過ぎた)で自作したMP3の再生・停止ボタンは、このバージョンでないとMP3ファイルの変更ができない。
    (2006/7/19)難易度 ★★☆☆☆
  146. 藤本壱さんが「エントリーを投稿する前にプレビューする」などのプラグイン」(TagsForPreview)をMT3.3対応されたので、対応版をインストールした。
    (2006/7/11)難易度 ★★☆☆☆
  147. litebox-1.0.jsに使われているgif images(「閉じる」「NEXT」「BACK」)を新たに作成して入れ替えた。
    (2006/7/11)難易度 ★★☆☆☆
  148. lightbox.jsをlitebox-1.0.jsに変更した。スライドショウ的に画像を表示できるようになった。
    (2006/7/10)難易度 ★★★☆☆
  149. MT3.3-jaにバージョンアップに伴いScodeの表示がおかしかったが、再インストールで表示されるようになった。
    (2006/7/7)難易度 ★★★☆☆
  150. MT3.3-jaにバージョンアップした。「エントリーを投稿する前にプレビューする」などのプラグインが動いていない。
    (2006/7/7)難易度 ★★★☆☆
  151. テンプレートの編集プラグイン MTBigTemplateWindowを導入した。"What's New?"ページの編集が容易になった。
    (2006/6/6)難易度 ★★☆☆☆
  152. コメント・テキストエリアの拡大をCSSの変更とTextarea toolsというJavaScriptの導入で行った。
    (2006/6/6)難易度 ★★☆☆☆
  153. 日本語でないスパムをJunk commentにフィルタするだけでは迷惑コメントにどんどん貯まっていくので、「小粋空間」で紹介されているSCode(SecurityCode)を入れてもらう対策を行った。
    (2006/5/27)難易度 ★★★☆☆
  154. 5月26日未明から猛烈なコメントスパムの攻撃を受ける。とりあえず認証を受けた人からのコメントのみを受け付けるに変更し、スパム対策を調査した。藤本 壱さんの「日本語でないスパムをフィルタするプラグイン」を設定した。Junk commentにフィルタリングされるようになった。
    (2006/5/26)難易度 ★★☆☆☆
  155. Weblogの右サイドメニューのサーチボックスでWebとSite内検索をRadioButtonで選択できるボックスに変更した。
    (2006/5/24)難易度 ★★☆☆☆
  156. lightbox導入以前のエントリーでの写真もすべてightbox表示にした。仕事は単純だが、時間がかかる。
    (2006/5/23)難易度 ★☆☆☆☆
  157. Weblogの右サイドメニューに、Google Search BOXをGoogleから提供されたコードを少しmodifyして設置した。
    (2006/5/21)難易度 ★☆☆☆☆
  158. 初めての人からTrackBack(TB)をいただいたので、今まで未整理だった右サイドメニューのTB表示を「最新の投稿」のように体裁を整えた。
    (2006/5/20)難易度 ★☆☆☆☆
  159. 梅田望夫さんの「ウェブ進化論」に感化されて、Google AdSenseに登録し右サイドメニューに掲載した。ついでに、メニューの順序を少し変更した。
    (2006/5/18)難易度 ★★☆☆☆
  160. lightboxの新バージョンが発表されているのでインストールを試みたが上手くいかなかった。
    難易度 ★★★★★
    元のバージョンがmodifyされているのでこれを導入した。
    (2006/5/11)難易度 ★★☆☆☆
  161. カテゴリー別の投稿の個々に投稿日付をつけた。ついでに、最近の投稿の日付表示を変更した。
    (2006/5/10) 難易度 ★★☆☆☆
  162. ホームページの左フレームに、blogへのボタン(隠居部屋)を設置した。
    (2006/5/4)難易度 ★☆☆☆☆
  163. 自作の音声再生・停止Flashボタンを利用して、HPのmusicサイトでのJazzを私のfavorite artistの一人であるEdomondo HallSweet Georgia Brownに変更した。
    (2006/5/3) 難易度 ★★☆☆☆
  164. 自ら録音したMP3音声を再生・停止するFlashボタンを配置した。
    (2006/4/23)難易度 ★★★★☆
  165. 各テンプレートの右サイドメニューを統一した。
    (2006/4/23) 難易度 ★☆☆☆☆
  166. HomePage(スタートページ)のGardeningページからhi-ho花の写真集へのリンクをすべてFlashAlbumに切り替えた。
    (2006/4/23) 難易度 ★★☆☆☆
  167. 画面上での録音再生を地図上のFlash fileで実現した。
    難易度 (2006/4/20) ★★★☆☆
  168. 新しいrecorder EDIROL R-1で小鳥の鳴き声を録音し、MTで再生するようにした。
    (2006/4/18) 難易度 ★★★☆☆
  169. hi-hoのアルバムサービスが閉鎖されるので、そこに収載していた花の写真集Flash AlbumにしてMT Weblogに移転した。
    (2006/4/11) 難易度 ★★☆☆☆
  170. IT関連用語表示のe-Words表示を「小粋空間」のカスタマイズに変更した。
    (2006/4/6)難易度 ★★☆☆☆
  171. What Is New? のエントリーを個別エントリーではなくテンプレートにした。
    (2006/4/5) 難易度 ★★☆☆☆
  172. 右サイドメニューのタイトルに、折りたたみマーク(▼△)をつけた。
    (2006/4/1) 難易度 ★★☆☆☆
  173. コメント投稿時に、HTMLタグが使いやすいようにタグマークをコメントフォームに設置した。
    (2006/4/1)難易度 ★★☆☆☆
  174. Weblogの背景画像をイペ材の木目と色調にしたことに伴い、「小粋空間」テンプレートで使っているCSS(Cascade Styles Sheet)を見直した。
    (2006/3/31) 難易度 ★★☆☆☆
  175. 「MTでつくる!最強ブログサイト」に紹介されていたカスタマイズを参考に、MTの個別エントリー表示ページとカテゴリ別表示ページに、e-Words IT用語検索を設置した。
    (2006/3/25) 難易度 ★★☆☆☆
  176. 「小粋空間」のサイドメニュー折りたたみを使わせてもらって、サイドメニューを折りたたみにした。
    (2006/3/24) 難易度 ★★★☆☆  
  177. RSS(Really Simple Syndication)リーダーとして、gooリーダーを設置した。
    (2006/3/21) 難易度 ★☆☆☆☆
  178. 各テンプレート(個別エントリーを除く)で、permalinkの表示を殺していたので、これを復活した。
    (2006/3/21) 難易度 ★☆☆☆☆
  179. アーカイブページ(archives.html)の表示がおかしかった(「小粋空間」ではテンプレートは提供されていない)ので、htmlそのものを少し弄ってなんとか見られるようにした。
    (2006/3/21) 難易度 ★★☆☆☆
  180. フリーで使わせてもらっているGoogleローカルの地図kingさんのアイコン・サイトへのbannerを設置した。ついでに、各テンプレートのクレジットバナー部分をphpモジュール化した。
    (2006/3/19) 難易度 ★☆☆☆☆
  181. ホームページで引用させて頂いている金井 壽宏先生の書籍「組織を動かす最強のマネジメント心理学」をamazon.co.jpで購入できるように、ブログにエントリを作った。
    (2006/3/19)難易度 ★★☆☆☆
  182. お遊び半分で、amazon.co.jpのアフリエートに登録してみた。OKが出たので、MT各テンプレートの右サイドに商品検索バナーを設置した。
    (2006/3/17) 難易度 ★☆☆☆☆
  183. 「小粋空間」に、私のエントリー(隣の花は紅い)が取り上げられた。Lightboxで画像を表示するときに、Flashを背面に隠すことが珍しかったらしい。名誉なことです。
  184. lightboxを応用して、地図上のポイント・アイコンをクリックすると画面が現れるような実験エントリーを投稿した。難易度 ★★★☆☆  (2006/3/16)
  185. サムネールをクリックすると同一ウィンドウ上(別画面でなく)に画像を表示するためのLightBox JSというカスタマイズを実施した。難易度★★★☆☆ (2006/3/12)
  186. Weblogのタイトル・バナーをFlashに変更した。(2006/3/8)
  187. エントリー用クライアントツール BlogWriteを導入した。
  188. MovableType(MT)の各テンプレート・タイトル部分を少し弄って、色をHPのタイトルと同色に変えた。(2006/3/7)
  189. MovableTypeのエントリー本文に、ボタンを置き、ボタンにカーソルを当てるとPasswordなど必要な語句がでるようにした。また、クリックするとリンク先にジャンプするようにした。
  190. Weblog ページの背景色を「小粋空間」さんのカストマイズを借りて、少し色を付けた。ついでに、横長カレンダーの背景色も同じにした。(2006/3/3)
  191. Weblog MainPageの右サイドバートップに、What's New? Flashボタンを設定した。(2006/3/3)
  192. hi-hoが運営するみんなの写真くらぶが5月で閉鎖されるので、Nikonが運営するOnlineAlbumへ移設することにした。HPからリンクしていた写真集を順次移す。(2006/3/3)
  193. SOTHINK SWF Quickerで創ったFlash MovieボタンをMTに持ち込んでみた。(2006/3/2)
  194. 鹿児島へ旅行したときに、知覧の武家屋敷跡で撮った花の写真などをFlash Albumにつくり、リンクした。(2006/3/2)
  195. 閲覧してもらった友人に指摘を受けて、コメント保留・エラー・受付の各テンプレートを「小粋空間」のテンプレートで設定した。自分宛にコメントを出すことはないので気づかなかった。(2006/3/2)
  196. 2月末に、鹿児島に旅行した。その時の記録を写真日記風に掲載した。(2006/3/1)
  197. Movable TypeでのWeblogのカレンダーを横長表示に変えました。Kinarie&Mayさんの作品を使わせてもらっている。(2006/2/23)
  198. Weblogの表示に、パンくずリストを置きたくて、その前提となるMTのphpモジュール化をしました。悪戦苦闘したが、どうやらどちらも形になった。(2006/2/21)
  199. 藤本壱さんの参考書にある「リンクの挿入をより便利にする」プラグインを導入した。表示には現れないがが、投稿原稿作成時のリンク挿入が楽になりそうです。(2006/1/17)
  200. MUSIC PageのFlashJazzをElla FitzgeraldMack The Knifeに変更した。(2006/2/17)
  201. eonet CGIで設置していたHomePageの作者への送信フォーム をlolipopの送信フォームに変えた。こちらの方が細かい設定がでるが、著作権のためにlogoを消すことはできないようです。(2006/2/14)
  202. インターネット接続先である光のeonetに置いてあった私のHomePageを独自ドメインに移設した。 eonet CGIのカウンターだけlolipopのものに変更した。(2006/2/13)
  203. 藤本 壱さんのカスタマイズを参考に、サイドメニューの月別アーカイブをセレクト表示に変えた。(2006/2/13)
  204. カテゴリーの階層化ついでに、並べる順序を私のHPと同じように変えた。これは、藤本 壱さんのプラグインを参考にさせて頂いた。思っていたよりすんなりといった。
  205. カテゴリーの階層化およびツリー表示を「小粋空間」のサイトなどを参考にカストマイズした。少しずつ形が整ってきた。DIYと同じように、何かができていくことは楽しいです。(2006/2/12 13:30)
  206. MT Weblogのメインページでの本文表示は、最近投稿した5エントリーにとどめ、その後にそれに続く15エントリーの概要を付けた。藤本 壱さんの参考書から引用したものを少し弄りった。(2006/2/11)
  207. LivedoorのBlogコンテンツをすべてn-shuhei.netに移設した。LivedoorのBlogは、本日(2006/2/10)かぎりで閉鎖することにした。 2GBフリーのスペースは魅力的であったが、今の情勢ではどこまで続くか疑問です。
  208. eatsさんに教えてもらって、MTのDBをSQLiteに変換した。今のところ500Errorは出なくて快適に再構築できている。Ogawa::MemorandamのサイトからDLした、mt-db-convert.cgi を使った。(2006/2/10)
  209. 下書きの時点でpreviewできるH.Fujimotoさんのplugin TagForPreviewをようやくのことインストールした。Livedoorのコンテンツをlolipop MovableTypeに移行するのが随分楽になった。(2006/2/7)
  210. MovableTypeの見栄えを考えて、pluginを持ち込むなど知識もないのに弄っていたら、Databaseを壊してしまったようです。泣く泣く再インストールした。(2006/2/5)
  211. What's New?のページを Atelier Shuhei's Weblogのこのエントリーに移行した。(2006/2/4)
  212. Livedoorでのblogページを新たにレンタルした lolipopにMovableTypeで設置したblogページ に移行中です。
  213. MUSICページでのJazzを Edmond HallのAs Long As I Live にした。(2006/1/22)
  214. NATUREのページ にFlash Movieを置いた。
  215. What's NewのボタンをFlashに変更した。(2006/1/15)
  216. 家内のガーデニング教室での作品を Flashアルバム で掲載した。(2006/1/5)
  217. Jazz Collectionのリスト を更新した。(2006/1/8)
  218. HOMEページにstaffonlyボタンを設け、家族用のalbumにリンクした。入室にはパスワードが必要です。(2006/1/4)

2008年4月28日

隠居のお勉強:JavaScript(11) try...catch

 サンデー毎日なのに結構なにやかやと時間をとられて、お勉強がすすんでいない。例によって、W3Schools の tutorial にしたがって、次のステップに進もうと思う。

 ネットでいろいろと調べてみると、try... catch という構文は、Ajaxでほぼ必須になっているらしい。私のJavaScript の勉強は、Web ページをもう少し動的にしたいという、だいそれた願望に基づいているから、Ajax に必須なら、特に力を入れて勉強したいと思う。

 try...catch の構文の文法は、次のように解釈できる。
try{エラーをキャッチしたいcodeの実行}
catch(err){エラーをキャッチしたときの処理内容}


 Script を書いていて、プログラムにバグがないかどうかを確認するときなどに使うらしい。エラーの内容を表示するようにしておくと、バグの箇所と特定するのに役に立つということである。本格的に JavaScript プログラムを書くことはまだまだ先のことであろうが、おぼえておきたい。

 W3Schools には、例示として次のようなコードが示されている。
<html>
<head>
<script type="text/javascript">
var txt=""
function message()
{
try
  {
  adddlert("Welcome guest!");
  }
catch(err)
  {
  txt="There was an error on this page.\n\n";
  txt+="Click OK to continue viewing this page,\n";
  txt+="or Cancel to return to the home page.\n\n";
  if(!confirm(txt))
    {
    document.location.href="http://www.w3schools.com/";
    }
  }
}
</script>
</head>

<body> <input type="button" value="View message" onclick="message()" /> </body>
</html>

 try ブロック部分の adddlert("Welcome guest!"); の adddlert は alert のミススペルでエラーとなるから、catch ブロックの処理を行って、confirm-box を表示させることになる。

 あまり意味はないが、テストのために上のコードを少しいじって、このエントリーに取り込んでみた。下のボタンをクリックしてみてください。 Confirm Box が出るはずです。

    
 なお、この JavaScript 部分を外部ファイル化し、テンプレートの head 部分に読み込んで使うことを試したがうまくいかなかったので、直接 head 部分に書き込んでいる。

2008年4月 7日

隠居のお勉強:JavaScript Basic (9) Break and Continue

 JavaScript の勉強が、1週間ほど空いているので再開することにした。

 W3Schools の次のレッスンは、Loop で使う break と continue である。

  • 二つの特殊なコマンド break, continue をloop の中で使うことができる。
    • break コマンドは、loop の途中である条件になれば、その loop を中止する。
    • 例を次に示す。
      <html>
      <body>
      <script type="text/javascript">
      var i=0;
      for (i=0;i<=10;i++)
      {
      if (i==3)
      {
      break;
      }
      document.write("The number is " + i);
      document.write("<br />");
      }
      </script>
      </body>
      </html>

    • 結果は次の通りになる。
      The number is 0
      The number is 1
      The number is 2

    • continue コマンドは、loop の途中である条件になる場合のみloop を実行しないが、loop は続ける。
    • 例を次に示す。
      <html>
      <body>
      <script type="text/javascript">
      var i=0
      for (i=0;i<=10;i++)
      {
      if (i==3)
      {
      continue;
      }
      document.write("The number is " + i);
      document.write("<br />");
      }
      </script>
      </body>
      </html>

    • 結果は次の通りになる。
      The number is 0
      The number is 1
      The number is 2
      The number is 4
      The number is 5
      The number is 6
      The number is 7
      The number is 8
      The number is 9
      The number is 10

 構文は理解できたが、どのような時に使われているのか分からない。

 なお、このようなエントリーを編集するときに、< や > を使う場合には、&lt; &gt; とエンコードしなければならないが、今回から HTML エンコードホームというサービスを使わせてもらうことにした。
 W3Schools などの example コードをこのページのエンコード前ボックスにコピペ(copy & paste)すれば、エンコードされた結果がエンコード後ボックスに表示されるので、これをエントリー編集画面にコピペすればよい。
 今までは、< などを一つずつ&lt; などと書き直していたのでずいぶん楽になった。
 今頃気がつくのは、老齢化現象の一つと思うが。

2008年3月31日

隠居の JavaScript :番号付きリストを降順にする。(追記)

 W3Schools JavaScript Tutorial の Loop の項まで学習して、Customaize History 履歴ページでのリスト番号を降順にする方法に使っている Expert が書いた次の JavaScript が少し理解できるようになったので、私の理解できた範囲でコメント文に記した。
<!--list descend-->
<script>
var o = document.getElementById("hoge");
//getElementById メソッドは指定ID(この場合:"hoge")のエレメント(この場合<ol>を指定する。
//"hoge"は、HTMLの<ol id="hoge"> というように指定している。
var max = o.childNodes.length;
//<ol id="hoge"> 要素内の子ノード(この場合、<li>..</li>)の数を変数 max に与える。参考:AllAbout JavaScript
for(var i = 0;i < max;i ++)
//隠居のお勉強:for loop の例
{
o.childNodes[i].value = max - i;
//子ノード<li>の i 番目に、(最大番号- i )を代入する。結果は、番号が降順になる。
}
</script> 


 なお、 Customaize History 履歴ページの番号降順設定は、上の JavaScript でInternetExplorer(IE) では上手くいっていたが、Mojilla 系の Firefox Netscape では番号が倍になり、原因が突き止められないまま放ってあった。
 今回改めて "childNodes.length" でネットサーチしてみると答えがあった。thescript.com というサイトのフォーラムによると、どうやら Mojilla 系では、 whitespace (空白スペース)をカウントの対象に入れるらしいことが分かった。
 そこで、Customaize History 履歴ページ(MovableType のインデックス・テンプレートで作成している)の編集画面で編集しやすくするために入れていた </li>....<li> の間の空白スペースを削除すると、Mojilla 系でも IE と同じように、綺麗な降順番号を表示するようになった。<li>..</li> のタグ・セット間に必ず空白スペースが入っていたので、偶然数字が倍の偶数になっていたらしい。

 この世界、学習すべきことは五万とある。死ぬまで退屈することはないだろう。

2008年3月30日

隠居のお勉強:JavaScript Basic (8) Loop

 W3Schools JavaScript Tutorial の第8回である。まだ、基礎部分を学習している。使わせてもらっている Expert が書かれた JavaScript を理解するには、まだ当分時間がかかりそうだが、少しずつ理解できる部分もでてきた。

 今回は Loop (ループ)である。ループには、For Loop While Loop がある。

  • for loop は、スクリプトを何回繰り返すかが分かる場合に使用される。
    • Example を次に示す。
      <html>
      <body>
      <script type="text/javascript">
      var i=0;
      for (i=0;i<=10;i++)
      {
      document.write("The number is " + i);
      document.write("<br />");
      }
      </script>
      </body>
      </html>
    • loop は、i=0 からスタートし、i が 10 以下の間、下のコード( document.write() )が繰り返される。i は1回繰り返されるたびに、1 付加される。結果は次のようになる。
      The number is 0
      The number is 1
      The number is 2
      The number is 3
      The number is 4
      The number is 5
      The number is 6
      The number is 7
      The number is 8
      The number is 9
      The number is 10


  • while loop は、特定の条件が true (真)である間ループする実行を求めるときに使われる。
    • Example を次に示す。
      <html>
      <body>
      <script type="text/javascript">
      var i=0;
      while (i<=10)
      {
      document.write("The number is " + i);
      document.write("<br />");
      i=i+1;
      }
      </script>
      </body>
      </html>
    • loop は、i が 10 以下の間、下のコード( document.write() )が繰り返される。結果は、for loop の場合と同じである。


  • do...while loop は、while loop の変種である。この loop は、常に code block を一度は実行する。それ以降は、特定の条件が true (真)である間実行をループする。
    • Example を次に示す。
      <html>
      <body>
      <script type="text/javascript">
      var i=0;
      do
      {
      document.write("The number is " + i);
      document.write("<br />");
      i=i+1;
      }
      while (i<0);
      </script>
      </body>
      </html>
    • 結果は、次の通りである。
      The number is 0

syntax は理解できたが、どのような場合に使われるかがよく分からない。

2008年3月28日

隠居のお勉強:JavaScript Basic (7) 関数

 全く自己満足の世界であるが、W3Schools での JavaScript Tutorial でお勉強を続けてみたい。

 今回は、[JS Functions]の項である。Function は、Example で既に使われているので、今回はおさらいである。
  • Function(関数)とは、イベントあるいは関数が呼び出されるときに実行される再使用可能なコードの集まりである。
    • おさらいのために、今回次のような学習のためのJavaScript を作成した。
    • ブログ・サーバーにおいた LinkButton.js という名前の js ファイル。
      //JavaScript Study Making Link Button
      function link_button()
      {
      var name=prompt("リンクする URL 名を入力ください。","URL");
      if (name!=null && name!="")
      {
      window.open(name);
      }
      }
    • この中で、prompt box に入力された URL を新しいウィンドウに開くという関数 link_button を設定している。
    • この関数を、ページを開いた時に呼び出すために、HTMLの <head> 部(MTのテンプレートで)においた。関数は、 <head> 部にも、 <body> 部にもおくことができるが、<head> 部におく方が賢明なようである。
    • <head> 部に関数を設定している js file を呼び出すためのHTML。<$MTBlogURL$>はMovableType のテンプレート・タグであり、私の場合、http://n-shuhei.net/blog/ を置換するタグである。
      <script type="text/javascript" src="<$MTBlogURL$>LinkButton.js"></script>
    • 呼び出した関数を実行するために、 <body> 部に関数 link_button() を実行させる次のような HTML を記述する。
      <input type="button" value="URL you want" onclick="link_button()" />

    • 右のボタンをクリックするとリンク先のURLを入力できる。  

    • 上の例は、arrgument (引数)がない場合の関数であるが、一般的には、次のような構文となる。
      function functionname(var1,var2,...,varX)
      {
      some code
      }
    • var1,var2 などは関数に取り込まれる変数または値である。 { と } は、関数の始めと終わりを示す。
    • var1,var2 などの引数がない場合にでも、関数名の後ろに () をつけなければならない。
    • 関数名は、小文字なければならない。JavaScript は大文字・小文字の区分が厳格である。


    • 関数ではまた、次のように関数から戻される値(戻り値)を特定する return statement が使われることがある。
      function prod(a,b)
      {
      x=a*b;
      return x;
      }
    • 上の関数を呼び出すときは、次のように2つのパラメータが必要である。
      product=prod(2,3);
    • 関数 prod() からの戻り値は 6 となるが、この値は product という変数で保存される。
    • 関数の中で宣言された変数は、その関数の中だけで使われるローカル変数となる。関数の外で宣言された変数は、グローバル変数と呼ばれ、宣言されたページのどの関数でも使用できる。ページが閉じられたときに消滅する。

2008年3月24日

隠居のお勉強:JavaScript Basic (6) Google Map link の confirm box を作る

 金曜の夜から、夫婦そろって風邪(?)を引いてしまった。どちらも消化器系をやられたので、一種の食中毒かもしれない。陽春の候というのに、二人揃って床に就いた。こんなことははじめてである。医者からもらった薬を服んで寝ていたら、翌朝は体調が戻った。

 引き続き、W3Schools JavaScript Tutorial で、お勉強である。今日は、[JS Popup Boxes] の項である。
  • JavaScript では、3種のポップアップ・ボックスを作成できる。  Alert: Confirm: Prompt: ボックスである。
    • Alert Box は、ページ閲覧者に確認の情報をポップアップ・ボックスに表示する。
    • Example を参考に、次のような js ファイル(名前はなんでもよいが、AlertBox_h1.js とした)を作って、ページの <head> 部においてみた。MTでは、メインページやエントリーページのテンプレートの <head> 部である。
      //JS Study: 改行付き Alert Box
      function disp_alert()
      {
      alert("Alert Box で改行するには" + '¥n' + "¥¥n¥ を使います。");
      }
       ¥は小文字である。MTやGoogle のサーチボックスや Gmail では、101/102 英語キーボードで小文字 ¥ を打つと、\ となって、小文字の ¥ は表示されない。この場合、HTMLのタグで使う、< > をエントリーで使うとき &lt; &gt; と入力するように、&yen; と入力すると小文字 ¥が表現される。なお、秀丸では小文字の ¥ が表示されるので、 js ファイル作成には問題がない。HTMLで表示されている入力部分に、小文字 ¥ を打つと、\ となるらしい。
    • ずいぶん寄り道をしたが、JavaScript での文字列の改行には、¥n を使う。HTML での < br /> と同じである。このときの ¥ をエスケープ・シーケェンスというらしい。エスケープ・シーケェンスについては、後ほど Tutorial の項目にもでてくるようだ。
    • MTテンプレートの <head> 部においた記述を次に示す。 <$MTBlogURL$> は、MT のテンプレート・タグである。
      <!-- JavaScript Study -->
      <script type="text/javascript" src="<$MTBlogURL$>AlertBox_h1.js"></script>
      

    • そして、 <body> 部に(エントリーに)次のようなHTMLを記述したとき、下のような Example が実行される。実際のブログへの応用については、まだ、思いつかない
      <input type="button" onclick="disp_alert()" value="改行つき Alert Box の例" />

    • Example:右のボタンをクリックしてみてください。
    • 今回初めて、 <head> 部で js ファイルを呼び出し、 <body> 部でそれを実行することを試みた。Expert が提供してくれている JavaScript プラグインの多くはこの方式をとっている。


  • Confirm Box は、ページ閲覧者に「OK」か「キャンセル」かの確認をとるお馴染みのポップアップ・ボックスである。
    • tutorial の Example と Tag <index> というページにある例を参考に、Alert Box のようによく利用する Google Map へのリンクボタンで確認するスクリプトを置いてみた。
    • 外部 js ファイル(名前はなんでもよいが、ConfirmBox_h2.js とした)と<head> 部(テンプレート)に記述したHTMLおよび <body> 部に(エントリーに)に記述したHTMLは次のようなものである。

    • 外部 js ファイル:別 Window に開きたかったので、tutorial にある location.href ではなしに window.open を用いた。 location.href では新しい Window に表示させる方法が分からなかった。
      //JavaScript Study Confirm Box
      function disp_confirm()
      {
      var r=confirm("Google Map を開きますか?");
      if (r==true)
        {
           window.open("http://maps.google.co.jp/","_blank");
         }
      else
        {
       window.alert('キャンセルされました'); 
        }
      }

    • <head> 部(テンプレート)に記述したHTML
      
      <script type="text/javascript" src="<$MTBlogURL$>ConfirmBox_h2.js"></script>
      

    • <body> 部に(エントリーに)に記述したHTML
      
      <input type="button" onclick="disp_confirm()" value="Google Map" />

右のボタンをクリックすると Confirm Box がでる。 
 ブログの右サイドにリンクボタンとして設置してみた。自作 JavaScript 3作目である。

  • Prompt Box は、多くの場合ページの訪問者にページに入る前に、何かの値を求めるときに使われる。
    • Example を参考に学習のために作った外部 js ファイル、<head> 部(テンプレート)に記述したHTMLおよび <body> 部に(エントリーに)記述したHTMLは次のようなものである。
    • 外部 js ファイル。名前はなんでもよいが、PromptBox_h3.js とした
      //JavaScript Study Prompt Box
      function disp_prompt()
      {
      var name=prompt("貴方のお名前を教えてください。","お名前");
      if (name!=null && name!="")
        {
          window.alert("今日は!! " + name + "さん。訪問ありがとうございます。");
        }
      }

    • <head> 部(テンプレート)に記述したHTML
      
      <script type="text/javascript" src="<$MTBlogURL$>PromptBox_h3.js"></script>
      

    • <body> 部に(エントリーに)に記述したHTML
      
      <input type="button" onclick="disp_prompt()" value="あなたのお名前は?" />
      


右のボタンをクリックしてみてください。
今のところ、どのように使うか思案しているが、まあ、隠居のお勉強の成果ということで、大目に見てください。

2008年3月21日

隠居のお勉強:JavaScript Basic (5) switch 構文を使って、本日の曜日を表示する

 前回の学習[JS If...Else] で、JavaScript を自分のブログへいささかの応用ができたので、勇気を得て続けて W3Schools JavaScript Tutorial でのお勉強である。

  • 今回は、条件式 [JS Switch] の学習。
    • 多くの選択肢から、一つの条件式を選んで実行する場合には、switch 構文を使わねばならない。
    • 以下は使用例である。
      <script type="text/javascript">
      //You will receive a different greeting based
      //on what day it is. Note that Sunday=0,
      //Monday=1, Tuesday=2, etc.
      var d=new Date();
      theDay=d.getDay();
      switch (theDay)
      {
      case 5:
        document.write("Finally Friday");
        break;
      case 6:
        document.write("Super Saturday");
        break;
      case 0:
        document.write("Sleepy Sunday");
        break;
      default:
        document.write("I'm looking forward to this weekend!");
      }
      </script>
    • break ステートメンを書くのは次の選択肢が実行されることを阻むためである。

  • これを応用して、自分のブログのタイトル下にある横長カレンダー横に、本日の曜日を表示することを試みた。横長カレンダーでは、曜日が分からない。
    • 上の example を参考に、次のような外部 js ファイルを秀丸で作成した。ファイル名は何でもいいが、TheDay.js として FFTP でブログサーバーにアップした。
      
      //今日は何曜日かを表示する js ファイル
      var d = new Date();
      theDay=d.getDay();
      switch (theDay)
      {
      case 0:
        document.write("<span id='js-text-red'><b>本日:日曜日</b></span>");
        break;
      case 1:
        document.write("<span id='js-text-grey'><b>本日:月曜</b></span>");
        break;
      case 2:
        document.write("<span id='js-text-grey'><b>本日:火曜</b></span>");
        break;
      case 3:
        document.write("<span id='js-text-grey'><b>本日:水曜</b></span>");
      break;
      case 4:
        document.write("<span id='js-text-grey'><b>本日:木曜</b></span>"); 
      break;
      case 5:
        document.write("<span id='js-text-grey'><b>本日:金曜</b></span>"); 
      break;
      case 6:
        document.write("<span id='js-text-blue'><b>本日:土曜</b></span>");
       break;
      }
      

    • スタイルシートに、次のスタイルを追加した。日曜日は、文字色を赤に、土曜日は水色にした。
      /* JS TheDay text */
      #js-text-grey { color: #408080; font-size: 10px; }
      #js-text-red { color: #ff0000; font-size: 10px; }
      #js-text-blue { color: #8888ff; font-size: 10px; }

    • MT テンプレート(メイン・エントリー)の<body> 部のカレンダー表示部分に、次のステートメントを追加した。
      <script src="http://n-shuhei.net/blog/TheDay.js"></script>
 これで、横長カレンダーの横に、本日:金曜日というように、ブログに訪問していただいた日の曜日が表示されるようになった。自作 JavaScript の2作目である。

2008年3月20日

隠居のお勉強:JavaScript Basic (4) 訪問時刻によって、挨拶文を変える。

 相変わらず、PC 前でRadio Senbokuを聴きながら、JavaScript のお勉強である。

 前回に書いたように、W3Schools JavaScript tutorial での [JS If...Else] のページにある Examples を応用して、私のブログのタイトルへ訪問時刻によって変化するお礼挨拶を表示させることにした。
 この具体例を記す前に、勉強したことを学習ノートにまとめておきたい。

  • [JS If...Else] で学んだこと。
    • デシジョンによって異なるアクションを実行する条件式を記述できる。
    • 条件式には、if statement ; if...else statement ; if...else if....else statement ; switch statement がある。
    • if statement はある特定条件が真(true) のみの場合にコードを実行する。次に例を示す。
      <script type="text/javascript">
      //Write "Lunch-time!" if the time is 11
      var d=new Date();
      var time=d.getHours();
      if (time==11) { document.write("<b>Lunch-time!</b>"); } <script><b>Lunch-time!</b>"); } <script>

    • if...else statementは、ある条件が、true の場合はあるコードを実行し、false の場合は他のコードを実行する。
      以下は事例。
      <script type="text/javascript">
      //If the time is less than 10,
      //you will get a "Good morning" greeting.
      //Otherwise you will get a "Good day" greeting.
      var d = new Date(); var time = d.getHours();
      if (time < 10) { document.write("Good morning!"); } else { document.write("Good day!"); } </script>

    • if...else if....else statement の記述によって、多くに条件の中から適切な条件に合致するコードを実行させることができる。
      下に example を示す。
      <script type="text/javascript">
      var d = new Date()
      var time = d.getHours()
      if (time<10)
      {
      document.write("<b>>Good morning</b>");
      }
      else if (time>10 && time<16)
      {
      document.write("<b>Good day</b>");
      }
      else
      {
      document.write("<b>Hello World!</b>");
      }
      </script>


 この if...else if....else statement を応用して、下のような外部 js ファイルを秀丸でエンコードを UTF8 として Greeting.js というファイル名(拡張子が js であれば名前は何でも良い)作成し、ブログサーバーに ファイル転送ソフト(FFTP) でアップした。
//ブログ・タイトルに、挨拶を表示する JSファイル
var d = new Date();
var time = d.getHours();
if (time<10)
{
document.write("<span style='color: #ffffe0'><b>おはようございます!! 早くからのご訪問ありがとうございます。</b></span>");
}
else if (time>=10 && time<18)
{
document.write("<span style='color: #ffffe0'><b>こんにちは!! いつもご訪問ありがとうございます。</b></span>");
}
else
{
document.write("<span style='color: #ffffe0'><b>今晩は!! いつもご訪問ありがとうございます。</b></span>");
}
 変数 d time の定義の仕方は、学習を進めると出てくると思うが、今のところ examples の通りに使っている。
 文字色を指定する span タグの間に入れるダブルコーテション( "---")の文字列ははシングルコーテション( '---' )でなければならない。

 この js ファイルをブログ・テンプレートのタイトル表示部分に、下の記述を挿入した。
 朝10時までに訪問していただいた方には、「おはようございます。」、10時から18時までに訪問していただいた方には、「こんにちは」、18時以降24時までの間に訪問していただいた方には、「今晩は」と表示されるはずである。
<script src="http://n-shuhei.net/blog/Greeting.js"></script> 


今まで学習したことを自分のブログのカストマイズに生かせるのはもっと学習が進んでからと思っていたが、この時点でささやかながら応用できた。お勉強の励みになるというものだ。

 

2008年2月28日

隠居、今頃になってブログの禁則処理方法を発見

 恥ずかしながら、ブログのエントリーなどでかいた英単語が行末で分断されていたり、行頭に「。」がきていたりしてもスペースの関係で仕方ないのだと思いこんでいた。

 Word などのワープロソフトでは、この禁則処理は初期設定で組み込まれている(「ツール」→「オプション」→「文字体裁」)のは知っていたが、Movable Type のようなブログ HTML での禁則処理の方法を知らなかった。
 ほっておくのもぶさいくなので、ネットで「HTML 禁則処理」のような検索語で方法をサーチしてみると、CSS で設定できることが分かった。ブラウザーによっては、自動的に禁則処理をしているようだが、ブラウザーによって異なるらしい。IEではあまりうまく処理されていないらしい。

 早速、自分のサイトの CSS (もともとは、「小粋空間」さんのテンプレートを利用させてもらっている)に、左のような id 属性( word-break line-break )を設定すると禁則処理ができるようになった。word-break は、英単語を行末で分断しないプロパティで、IE のみで有効なようである。詳しくは、HTML クイックリファレンスにでている。値に、keep-all を指定すると全ての言語で単語の途中では改行せず、単語の切れ目で改行されることになっているが、この設定では形が崩れてしまうようだ。
 また、line-break は、行頭・行末の禁則処理で、これも IE に独自なプロパティのようだ。これも詳しくは、HTML クイックリファレンスの line-break のページにでている。この方は、 normal と strict とでは余り変化がないように思える。最近のブラウザーでは、それ自身が禁則処理を行っているようである。

 スタイルシートに設定前と設定後を比較すると、下のような結果になる。CSS を設定した方があきらかに読みやすい。こんなことがすぐ分かるのも、ネットのおかげである。
word-break.jpg

word-break_a.jpg
  

2008年2月23日

隠居、メニューをFlashボタンに変えてみる

 エントリーした日が表示される Flash の横長カレンダーや表示する地方を指定できる Flash 天気予報は、Kinarie&May さんの作品を使わせてもらっている。

 このサイトのメニューボタンが、なかなか洒落ている。自分でカストマイズできるように、Flashメニュー素材も公開されている。変化するメニューボタンを作りたかったので導入させてもらおうと思ったが、今気に入っている動きのあるタイトルを変えなければならないので諦めた。

 もう一度、Flash8 を学習しなおすうちに、先日作った「音の鳴る動きのあるリンク・ボタン」を作ったときの方法を応用すれば、少し似通ったものができるのではないかと気がついた。どうにか形になったので、例によって自分の記録用にかきとめておきたい。
 
  1. Flash8 を立ち上げ、新規→フラッシュドキュメントを選択する。
  2. 「修正」→「ドキュメント」で、メニューボタンを設置する場所の大きさに合わせて、ステージの大きさ・背景色を決める。今回は、1000px X 40px の大きさで、カラーピッカーでスポイドしたブログ・タイトルの背景色(#784028)にした。
  3. 「挿入」→「新規シンボル」でボタンを選択して、title_homeとボタン名を付ける。(名前はなんでもよい。)
  4. ボタン作成画面の再生ヘッドがアップにある状態で、ツールパネルの矩形ツールでステージ内に長方形を描く。
  5. レイヤー1のアップフレームをクリックし、ステージ上の長方形をクリックすると、プロパティ・インスペクターがシェイプに変わって、長方形を編集することができる。今回は、130 x 25px の長方形を描いた。
  6. アップ時のボタンの色(塗りのカラー)は、プロパティ・インスペクターにあるバケツの横の四角をクリックすると出てくるスポイドで、画面上の好きな色をクリックすると変えることができる。また、出てくる色パネルから選択したり、6桁の色番号を指定したリストことができる。色番号を指定する場合には、WebColorCreator というカラーピッカーを利用すると便利である。
  7. ボタンの枠線は、境界線を明瞭にするために、細い実線とした。
  8. テキストは、ツールパネルから、テキスト[A]アイコンをクリックし、プロパティ・インスペクターで、フォント・大きさ・色などを指定し、ステージ上で入力し、ボタン上にドラッグする。今回は、フォントは Verdana 12pt Bold 白を選んだ。
  9. 次に、ボタンのオーバーフレームを右クリックして、「キーフレームを挿入」をえらぶと、アップ・フレームと同じボタンが表示される。
  10. アップ・フレームと変化をつけるため、塗り色は、プロパティ・インスペクターのバケツアイコンをクリックしてでるカラーピッカーで水色を選んだ。
  11. 次に、ダウン・フレームで「キーフレームを挿入」をえらぶとオーバーフレームのボタンがコピーされる。
  12. ヒット・フレームにも「キーフレームを挿入」をえらんでおく。このフレームは表示されないから、そのままでも問題はないようだ。
  13. 「タイムライン」横の「シーン1」をクリックし、ステージに先ほど作成したボタンをライブラリーからドラッグする。このとき、「表示」→「表示比率」→「ウインドウに合わせる」に設定しておくと全体像がつかめる。
  14. ステージにあるボタンをクリックするとプロパティ・インスペクターのプロパティがボタンに変化するのを確かめて、インスペクターの左下の位置決めを、今回の場合、w 130 H 25 X 0.0 Y 15 .0 とした。
  15. 次に、ボタンをクリックしたときに、リンク先につながるようにするには、簡単な Action Script を使う。「アクション」パネルを開き、「ムービークリップ制御」「ブラウザ/ネットワーク」から、下のようなスクリプトを作る。
    on (release) {
    getURL("http://n-shuhei.net/blog/);
    }
  16. ここまで作成した Flash ボタンの動きは、「ファイル」→「バブリッシュ・プレビュー」→「Flash」で確認するのがよいようだ。 [F12]キーを押してHTMLでの確認はうまくいかなかった。
    クリックすると大きくなりますこの時点での画面は、左の screenshot のようになる。




  17. ここまでうまくいけば、あとは同様の作業の繰り返しとなる。まず、右のライブラリーの title_home のボタンを右クリックして、「複製」を選択すると、ポップアップ画面がでるので、新たなボタン名を、例えば、title_radio のようにつける。
  18. このライブラリーのtitle_radio ボタンをダブルクリックすると、 title_home のボタンの複製ボタンがでてくるので、アップ・オーバー・ダウン フレームのそれぞれのテキスト部分を RadioSenboku のように変える。
  19. シーン1上に、このボタンをライブラリーからドラッグして、設置する。このときの位置表示は、w 130 H 25 X 130.0 Y 15 .0 とすればよい。
  20. ステージ上でこのボタンを選択して、アクションパネルから、新しいリンク先URLを含むスクリプトを入力する。これで、メニューボタンの2つめができる。
  21. ほかのボタンの設置は、17?20 の繰り返しである。
  22. このようにしてできたファイルを「書き出し」→「ムービーの書き出し」で swf ファイルで保存し、FTPソフトでサーバーにアップロードする。あとは、Web Title 部分に設置するだけである。
  23. なお、ボタンのオーバーフレームのときに音を出すようにするのは、「音の鳴る動きのあるリンク・ボタン」のエントリーでの 9.項を参照にして設定する。


 このエントリーは前に書いたエントリーが基礎になっている。記録することによって、知識はアンプリファイ(増幅)することを身にしみて感じている。

2008年2月 7日

隠居、音の鳴る動きのあるリンク・ボタンをつくる

 リンクボタンを Flash で作成する方法をすぐに忘れてしまい、新たに作るときは一からの学習となるので、今回右サイドメニューのリンクボタンをいじった経緯を備忘録として書いておきたい。
 Flash 作成は、日本語が扱えるので Macromedia FLASH8 を使用しているが、使い込めばいろいろと面白いことができそうだが、まずは基本的な学習からである。
 なお、Flash リンクボタンの作成については、過去に何度かエントリーしている。それらは、ほとんど tutorial のものまねである。過去のエントリーについては、TagCloud の "Flash" で検索して欲しい。

  1. Flash8 を立ち上げ、新規→フラッシュドキュメントを選択する。
  2. 「修正」→「ドキュメント」で、ボタンを設置する場所に合わせて、ステージの大きさ・背景色を決める。デフォールトに設定しておくと、同じようなボタンを作る作業を続ける場合は、便利である。
  3. 「挿入」→「新規シンボル」でボタンを選択して適当なボタン名を付ける。
  4. ボタン作成画面の再生ヘッドがアップにある状態で、ツールパネルの矩形ツールでステージ内に長方形を描く。
  5. レイヤー1のアップフレームをクリックし、ステージ上の長方形をクリックすると、プロパティ・インスペクターがシェイプに変わって、長方形を編集することができる。
  6. アップ時のボタンの色(塗りのカラー)は、プロパティ・インスペクターにあるバケツの横の四角をクリックすると出てくるスポイドで、画面上の好きな色をクリックすると変えることができる。また、出てくる色パネルから選択したり、6桁の色番号を指定したリストことができる。色番号を指定する場合には、WebColorCreator というカラーピッカーを利用すると便利である。
  7. テキストは、ツールパネルから、テキスト[A]アイコンをクリックし、プロパティ・インスペクターで、フォント・大きさ・色などを指定し、ステージ上で入力し、ボタン上にドラッグする。
  8. 次に、ボタンのオーバーフレームを右クリックして、「キーフレームを挿入」をえらぶと、アップ・フレームと同じボタンが表示される。
  9. アップ・フレームと変化をつける場合、たとえばボタンの色を同色で薄くする場合は、プロパティ・インスペクターのバケツアイコンをクリックしてでるカラーピッカーの「アルファ」を50%にでもすればよい。カーソルがボタンの上にくると音がでるようにするには、事前に、MP3ファイルをライブラリーに読み込んでおく。フレームをクリックしたときのプロパティ・インスペクターにあるサウンド・リストボタンをクリックすると読み込んでおいたMP3ファイルが表示されるので、これを選択する。効果:なし、同期:スタート、繰り返し:1でよい。(アップ・フレーム、ダウン・フレームでは、同期:ストップを選ぶ)
  10. 次に、ダウン・フレームで「キーフレームを挿入」をえらぶとオーバーフレームのボタンがコピーされる。
  11. ヒット・フレームにも「キーフレームを挿入」をえらんでおく。このフレームは表示されないから、そのままでも問題はないようだ。
  12. 次に、ボタンをクリックしたときに、リンク先につながるようにするには、簡単な Action Script を使う。「タイムライン」横の「シーン1」をクリックし、ステージに先ほど作成したボタンをライブラリーからドラッグする。
  13. ステージにあるボタンをクリックするとプロパティ・インスペクターのプロパティがボタンに変化するのを確かめて、「アクション」パネルを開き、「ムービークリップ制御」「ブラウザ/ネットワーク」から、下のようなスクリプトを作る。
    on (release) {
    getURL("http://n-shuhei.net/xxxxx/xxxx", "_blank");
    }
  14. 問い合わせなどのメール送信ボタンの場合には、次のようなスクリプトにする。
    on(release){
    mURL="mailto:xxxxxxxxxxx@n-shuhei.net";
    mURL+="?subject="+"問い合わせ:";
    mURL+="&body="+"よろしければ、お名前をお聞かせください。";
    getURL(mURL);
    }
  15. このようにして作成した Flash ボタンの動きは、[F12]キーを押してHTMLで確認する。「ファイル」→「バブリッシュ・プレビュー」→「HTML」でも確認できる。
  16. 動きが確認できれば、「ファイル」→「書き出し」→「ムービーの書き出し」で、.swf ファイルを保存し、FTPソフトでサーバーにアップする。
    なお、.fla ファイルも保存をしておいた方が、後の編集に有用である。


 あとで気づいたことであるが、2006年12月のエントリーが多いに参考になる。何回も同じことを繰り返すのは、アルツハイマーの典型的な症状である。
(追記:2007/2/11) メール送信ボタンの試験をしていて気づいたことがある。動きの確認で、うまくメールが立ち上がるときと立ち上がらないときがある。ActionScript に自信がないので、そのせいかと疑ったが違うらしい。いろいろとサーチしてみたが、よく分からなかった。
 うまくメーラーが立ち上がるときは、Outlook が立ち上がる。私は、普段メーラーは、Beckey! を使っているのに、「コントロールパネル」→「インターネット・オプション」→「プログラム」の電子メールが「Microsoft Outlook」となっているせいであった。これを「Beckey!」に変えると、問題なく動くようになった。
 基本的なところで抜かっている。歳のせいにしておきたい。

2007年5月24日

隠居のMT備忘録:mt-site.js の文字色を変える

 プロ並みの写真を撮る友人のブログを構築した。同じML仲間でMTでのブログ製作の先輩から、ブログの背景などのスタイルを異なるデザインした方がいいのではというアドバイスを受けて、スタイルシート styles-site.css を弄って背景色などを変更した。背景色を変えるとヘッダーなど色々なスタイルで文字が見えない状況がでてくる。普通にはスタイルシートを修正したり新たに class を作ったりして文字色を変えれば文字が見えるようになるが、エントリー・アーカイブ中のコメント投稿部分の Typekey に関するメッセージの「サインイン」「サインアウト」文字色は変えられなかった。この部分は、ブログ毎に再構築時に再生成される mt-site.js という JavaScript テンプレートにある文字が表示される。(実は、昔学習したことがあるのに、これを見つけるのに時間がかかった。) 

続きを読む "隠居のMT備忘録:mt-site.js の文字色を変える"

2006年11月 3日

番号リストで番号を降順にする方法は?

 自分のWeblogを中心とするホームページに手を加えた事項を備忘録的に書き留めて、カストマイズ履歴のページをテンプレートとして作成している。カストマイズした項目のリストは新しいカストマイズが一番上にきているが、リストの番号は一番最新のものが常に1番であった。この番号はできれば最新のカストマイズが何番目のカストマイズかを示したいので、番号は降順にして1番目にしたカストマイズは1番にしたい。HTMLのコードでは、HTML4.01の仕様書でもそのような方法は記載されていないらしく、HTMLコードではどうも駄目らしい。Googleで「HTML 降順 リスト ol li」でサーチすると、人力検索?Hatena::Qustionで「HTML番号リストで番号を逆順にする方法は?」という質問があり、その回答に andi さんという方が JavaScript での解決を提示されておられる。この JavaScript をいただいて、カストマイズ履歴テンプレートに貼り付けてみると希望通りの表示になった。ただし、このJavaScriptは、</ol> の後に貼り付けると上手くいくようだ。なお、<ol> は下のScript 似合わせて <ol id=hoge> とValue属性が必要である。 ちなみに、この JavaScript は以下の通りである。
<script>
var o = document.getElementById("hoge");
var max = o.childNodes.length;
for(var i = 0;i < max;i ++){
o.childNodes[i].value = max - i;
}
</script>

続きを読む "番号リストで番号を降順にする方法は?"